2011-08-26 55 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

另外,由于实现了'IDisposable',所以你应该在'db'中使用using语句。 –

回答

0

这是因为你的LINQ表达式返回Select的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

插入一个值为Doc_id列的D.WF_ID == ID – Sofy

0

select操作的结果是在你的情况下IEnumerable<T>IEnumerable<int>为DOC_ID是int类型。

我会说你这样做:

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

通过调用不调用GetEnumerator上查询你实际上并没有从数据库中检索任何东西。将您的查询封装在()中,并使用ToList(),First(),Single()或其他来调用查询。

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

从那里只返回标识你要返回一个int,如果你想更新你的实体使用select D

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

从那里,你可以简单地更新返回完整的对象值和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回到一个(方法获取)的项目,而不是单个项目的列表。您需要遍历结果集并应用更新,或者使用Single/First方法之一获取一个值,并像其他人指出的那样更新它。另外,如果要更新实体中的值,则需要投影整个对象,然后编辑要更新的值。通过投影单个ID,对象类型的其余部分将丢失,EF不知道如何将更新与底层数据库行对齐。