Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ中设置或更新数据_C#_.net_Linq_Compiler Errors - Fatal编程技术网

C# 在LINQ中设置或更新数据

C# 在LINQ中设置或更新数据,c#,.net,linq,compiler-errors,C#,.net,Linq,Compiler Errors,林克大道 我想比较记录的id=参数的id 然后我想在同一条记录中设置或更新doc_id。 我在这里写了几行: 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

林克大道 我想比较记录的id=参数的id 然后我想在同一条记录中设置或更新doc_id。 我在这里写了几行:

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;
 }
但我有一个错误:

无法将类型“int”隐式转换为“System.Linq.IQueryable”


有什么帮助吗?谢谢。

这是因为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

     }

select
操作的结果是一个
IEnumerable
,在您的情况下,一个
IEnumerable
,因为Doc\u ID的类型是int

我想说你这样做:

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

通过不对查询调用
GetEnumerator
,实际上并没有从数据库中检索任何内容。将查询包装在
()
中,并使用
ToList()
First()
Single()
或其他方法调用查询

Waiting_Task entry = (from D in DB.Waiting_Tasks
                      where (D.WF_ID == ID)
                      select D).FirstOrDefault();
如果要更新实体,只需返回Id即可返回单个
int
,使用
select D

我想在同一记录中设置或更新文档id

从那里,您只需更新值,然后
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();
}

只是

c返回一个项目列表(获取项目的方法),而不是单个项目。您需要迭代结果集并应用更新,或者使用Single/First方法之一获取一个值并按照其他人指出的那样进行更新


此外,如果要更新实体中的值,则需要将整个对象投影出来,然后编辑要更新的值。通过投影单个ID,对象类型的其余部分将丢失,EF不知道如何将更新与基础数据库行对齐。

此外,还应使用using语句将
DB
括起来,因为它实现了
IDisposable
。要插入一个D.WF\u ID==ID的值Doc\u ID列
Waiting_Task entry = (from D in DB.Waiting_Tasks
                      where (D.WF_ID == ID)
                      select D).FirstOrDefault();
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();
}
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
...