有没有办法可以重写以下查询,使其只有一个查询?
try
{
var fileIds = (from f in context.SignalTo
where f.SignalFileID == 2
select new { f.GFileID }).ToList();
foreach (var id in fileIds)
{
var pp = (from p in context.ProjectFiles
where p.FileID == id.GFileID && p.ProjectID == ProjectID
select p);
if (pp != null)
{
ProjectFiles projectFile =(ProjectFiles) pp;
projectFile.MStatus = Status;
projectFile.DateLastUpdated = DateTime.Now;
context.SaveChanges();
}
}
}
答案 0 :(得分:1)
您可以将代码的两个查询部分合并为一个。
然后,您需要循环结果集,进行更新。然后,您将调用context.SaveChanges以一批提交所有更改。
我无法判断您的现有代码是否实际运行或编译,但您需要这样的内容:
获取您感兴趣的文件ID列表:
var fileIds = from f in context.SignalTo
where f.SignalFileID == 2
select f.GFileID;
fileIds 在这一点上是一个IQueryable,我假设T是一个Int。目前尚无任何查询。
现在你可以做到
var pps = from p in context.ProjectFiles
where fileIds.Contains(p.FileID) && p.ProjectID == ProjectID
select p;
仍然没有执行查询。
然后迭代结果集
foreach( var pp in pps ) // query executed now
{
pp.MStatus = Status;
pp.DateLastUpdated = DateTime.Now;
}
context.SaveChanges(); // batch of updates executed now