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