2

これを、データベースに対して 1 回だけクエリを実行するエンティティ フレームワーク クエリに変換することは可能ですか?

  select max(TableADate) latestTableADate, max(TableBDate) latestTableBDate
  from
  (
      select max(a.ModifiedDate) TableADate, null TableBDate
      from TableA a

      union all

      select null, max(b.ModifiedDate)
      from TableB b
  ) data

目的は、1 つの SQL ステートメントで複数のテーブルから最新の ModifiedDate を取得することです。そのため、Entity Framework はデータを取得するためにデータベースへの複数のトリップを実行しません。

テーブルの 1 つが最後に更新されたのはいつかを知る必要があります。

アップデート:

私は次のことを使用して終了しDbContext.Database.SqlQueryました:

  var output = db.Database.SqlQuery<DateTime>
                  ("select data from (" +
                    "select 1 orderBy, max(ModifiedDate) data from TableA" +
                    "union all " +
                    "select 2, max(ModifiedDate) from TableB " +
                  ") temp order by orderby").ToList();


  data.TableADate = output[0];
  data.TableBDate = output[1];
4

1 に答える 1

1

DbContext.Database.SqlQuery メソッドを使用して、リストしたものと同様のクエリを実行できます。何らかの順序で日付を返すように変更するか、out parametersを使用する必要があります。

于 2013-05-30T14:15:03.770 に答える