2011-08-26 4 views
0

통해 LINQ 레코드의 id = 매개 변수 ID를 과 비교하고 동일한 레코드에서 doc_id를 설정하거나 업데이트하고 싶습니다. 내가 여기에 몇 가지 라인을 작성했습니다LINQ에서 데이터를 설정 또는 업데이트하십시오.

public void Fill_WF_Doc(string ID, int doc) 
{ 
    DataClasses1DataContext DB = new DataClasses1DataContext(); 
    Waiting_Task entry = new Waiting_Task(); 
    var c = from D in DB.Waiting_Tasks 
      where (D.WF_ID == ID) 
      select D.Doc_ID; 
    c = doc; 
} 

하지만 난이 오류가 있었다 :

Cannot implicitly convert type 'int' to 'System.Linq.IQueryable'

어떤 도움을? 고맙습니다.

+0

또한 'DBis'는'IDisposable'을 구현하므로 using 문으로 묶어야합니다. –

답변

0

LINQ 표현식이 선택의 IEnumerable 블록을 반환하기 때문입니다.

public void Fill_WF_Doc(string ID, int doc) 
    { 
     DataClasses1DataContext DB = new DataClasses1DataContext(); 
     Waiting_Task entry = new Waiting_Task(); 
     var c = from D in DB.Waiting_Tasks 
       where (D.WF_ID == ID) 
       select D.Doc_ID; 
     c = doc;//this throw an exception as doc is an Int but c is an ienumerable 

    } 
0
// c is an IEQueryable<int> 
    var c = from D in DB.Waiting_Tasks 
      where (D.WF_ID == ID) 
      select D.Doc_ID; 
    // Error is here, you affect an int to an IQueryable<int> 
    c = doc; 

당신이 뭘 하려는지 :

예외를 던질 줄은 아래로 보여?


편집

이 c.WF_ID를 업데이트하려면 수행

var c = (from D in DB.Waiting_Tasks 
     where (D.WF_ID == ID) 
     select D.Doc_ID).FirstOrDefault(); 
if(c != null) 
{ 
    c.WF_ID = doc; 
} 
+0

D.WF_ID == ID 인 값 Doc_id 열을 삽입하십시오. – Sofy

0

select 연산의 결과가 DOC_ID로 IEnumerable<int>이 int 유형의 사건에 IEnumerable<T>입니다.

난 당신이 이렇게 말할 것입니다 :

c.ToList().ForEach(e => e = doc); 
1

를하지 쿼리에 GetEnumerator에 전화를 호출 당신이 실제로 데이터베이스에서 아무것도 검색하지 않습니다에 의해. 쿼리를 ()에 넣고 ToList(), First(), Single() 또는 다른 쿼리를 호출하십시오. 단지 당신이 당신의 엔티티는 단순히 업데이트 할 수 있습니다 거기에서 select D

I want set or update the doc_id in the same record.

를 사용하여 전체 개체를 반환 업데이트 할 경우, 하나의 int을 반환하고자하는 아이디를 반환하여 거기에서

Waiting_Task entry = (from D in DB.Waiting_Tasks 
         where (D.WF_ID == ID) 
         select D).FirstOrDefault(); 

값과 SubmitChanges()을 사용하여 업데이트 된 값을 다시 데이터베이스로 푸시합니다.

public void Fill_WF_Doc(string ID, int doc) 
{ 
    DataClasses1DataContext DB = new DataClasses1DataContext(); 
    Waiting_Task entry = (from D in DB.Waiting_Tasks 
         where (D.WF_ID == ID) 
         select D).FirstOrDefault(); 
    entry.Doc_ID = doc; 

    DB.SubmitChanges(); 
} 
0
DataClasses1DataContext DB = new DataClasses1DataContext(); 
var docs = from D in DB.Waiting_Tasks 
      where (D.WF_ID == ID) 
      select D; // select all the docs met the criteria 

foreach(var D in docs) 
{ 
    D.Doc_ID = doc; 
} 

또는

DataClasses1DataContext DB = new DataClasses1DataContext(); 
var docs = DB.Waiting_Tasks.Where(D => D.WF_ID == ID); // or FirstOrDefault() if ID is key or unique constraint 
... 
0

는 C 항목이 아닌 단일 항목의 목록 (A를 얻을 방법)을 반환합니다. 결과 집합을 반복하고 업데이트를 적용하거나 Single/First 메서드 중 하나를 사용하여 하나의 값을 얻고 다른 값이 지적한대로 업데이트해야합니다.

또한 엔터티의 값을 업데이트하려면 전체 개체를 투영 한 다음 업데이트 할 값을 편집해야합니다. 단일 ID를 투영함으로써 나머지 오브젝트 유형은 손실되고 EF는 갱신 사항을 기본 데이터베이스 행과 정렬하는 f}을 알지 못합니다.

관련 문제