0

次のクエリを書き直して、1 つのクエリにする方法はありますか?

 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

コードの 2 つのクエリ部分を 1 つに結合できます。

その後、結果セットをループして更新を行う必要があります。次に、context.SaveChanges を呼び出して、すべての変更を 1 つのバッチで送信します。

既存のコードが実際に実行またはコンパイルされるかどうかはわかりませんが、次のようなものが必要です。

関心のあるファイル 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 に答える