私は現在、EF を活用するプロジェクトに取り組んでおり、以下にあるものを処理するためのより効率的またはクリーンな方法があるかどうか疑問に思っています。
SQL Server では、次のようにして必要なデータを取得できました。
SELECT tbl2.* FROM
dbo.Table1 tbl
INNER JOIN dbo.Table2 tbl2 ON tbl.Column = tbls2.Colunm
WHERE tbl.Column2 IS NULL
UNION
SELECT * FROM
dbo.Table2
WHERE Column2 = value
非常に簡単です。ただし、LINQ には次のようなものがあります。
var results1 = Repository.Select<Table>()
.Include(t => t.Table2)
.Where(t => t.Column == null);
var table2Results = results1.Select(t => t.Table2);
var results2 = Repository.Select<Table2>().Where(t => t.Column2 == "VALUE");
table2Results = table2Results.Concat(results2);
return results2.ToList();
何よりもまず、このコードを含むメソッドの戻り値の型は IEnumerable< Table2 > であるため、最初に Table1 の列が null である Table2 の関連付けをすべて取得します。次に、Table2 レコードを選択して、IEnumerable 型の変数を作成する必要があります。コードの残りの部分は、それが何をするかという点でかなり単純です。
これは私にはひどくおしゃべりに思えますが、私が達成しようとしていることを行うためのより良い方法があると思います. 生成された SQL はひどいものではありません (読みやすくするために列リストを省略しました)
SELECT
[UnionAll1].*
FROM (SELECT
[Extent2].*
FROM [dbo].[Table1] AS [Extent1]
INNER JOIN [dbo].[Table2] AS [Extent2] ON [Extent1].[Column] = [Extent2].[Column]
WHERE [Extent1].[Column2] IS NULL
UNION ALL
SELECT
[Extent3].*
FROM [dbo].[Table2] AS [Extent3]
WHERE VALUE = [Extent3].[Column]) AS [UnionAll1]
それで、私が説明したことを行うためのよりクリーンで効率的な方法はありますか? ありがとう!