通过LINQ 我想比较记录的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'
有任何帮助吗?谢谢。
答案 0 :(得分:1)
通过不对查询调用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
我想在同一记录中设置或更新doc_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();
}
答案 1 :(得分: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
}
答案 2 :(得分: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;
}
答案 3 :(得分:0)
select
操作的结果是IEnumerable<T>
为IEnumerable<int>
,因为Doc_ID的类型为int。
我会说你这样做:
c.ToList().ForEach(e => e = doc);
答案 4 :(得分: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
...
答案 5 :(得分:0)
c返回一个(获取方法)项目列表,而不是单个项目。您需要迭代结果集,并应用更新,或使用其中一个Single / First方法获取一个值并按其他人指出的那样更新它。
此外,如果要更新实体中的值,则需要将整个对象投影出来,然后编辑要更新的值。通过投影单个ID,对象类型的其余部分将丢失,EF不知道如何将更新与基础数据库行对齐。