我目前正在开发一个利用 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> 类型,因此首先我返回所有 Table2 关联,其中 Table1 中的列为空。然后我必须选择我的 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]
那么有没有一种更清洁/更有效的方法来做我所描述的事情?谢谢!