0

有没有办法可以重写以下查询以使其只是一个查询?

 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();
                    }


                }
            }
4

1 回答 1

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
于 2012-04-09T18:37:34.327 回答