次のlinq文(.net 4.5)では、2つのテーブルに対して左ジョインを行い、次に各ジョインの最初のローを取ろうとしていますソートは2番目のテーブルで行われます。 Wanted
カラムは常に、データベース内の最初の列から値を返すようOrderByDescending
コールが、第二のテーブルに適用されていないがサブクエリ、内部Selectを選択しないで基になるクエリにOrder By
using (var context = new TestEntities())
{
var items = ctx.FirstTables
.GroupJoin(
ctx.SecondTables,
first => first.IntJoin,
second => second.IntJoin,
(firstTableRow, secondTableRows)
=> new { firstTableRow, secondTableRows })
.Select(
result => new
{
result.firstTableRow.IntJoin,
NewWanted = result.secondTableRows
.OrderByDescending(x => x.Sort)
.Select(x => (int?)x.Wanted)
.DefaultIfEmpty(null)
.FirstOrDefault()
});
}
。私は、以下のリストを取得することが期待でしょう
IntJoin || Sort || Wanted
0 0 1
0 1 2
0 2 3
1 0 6
1 1 5
1 2 4
null 0 7
null 1 9
null 2 8
:
IntJoin || NewWanted
0 3
1 4
2 null
null 8
何
IntJoin
0
1
2
null
SecondTable:
だから次の表は、
FirstTable値与えられましたしかし私は、この
IntJoin || NewWanted
0 1
1 6
2 null
null 7
で取得し、OrderByDescending
コールとEntity FrameworkのコアISNを無視している.NET Frameworkの.NETのコアに2.0.1
IntJoin || NewWanted
0 3
1 4
2 null
null null
だから、Entity Frameworkの実行EntityFrameworkCoreに次のように取得します't(.net Coreはnull比較を処理できないようです。私はコアを使用していないだけの問題は、他の質問に残されている(または別の質問に答えられるかもしれない)ので、差をテストするための例を作成しました
私はこのすべてを試してみました。 Entity Framework 6.2.0を使用して)、.NET Core 2.0(Entity Framework Core 2.0.1を使用)をMicrosoft Sql Server 2008および2016で使用し、同じ結果を達成しました。
私はおそらくGroupJoin
とSelect
間.ToList()
を呼び出すことができます知っているが、これは大きなクエリの一部であり、メモリ内のクエリを実行することは非常に高額になります。
私も