有谁知道为什么这样的逻辑:LINQ增加额外的逻辑WHERE子句
var t = _repo.Surveys
.Where(s => s.status &&
(s.regionid == null || s.regionid.Value.Equals(regionid)))
.ToList();
将构建该WHERE
条款?
WHERE ([Extent1].[status] = 1)
AND (([Extent1].[regionid] IS NULL) OR
(([Extent1].[regionid] = @p__linq__0) AND (NOT ([Extent1].[regionid] IS NULL OR @p__linq__0 IS NULL))) OR
(([Extent1].[regionid] IS NULL) AND (@p__linq__0 IS NULL)))'
,N'@p__linq__0 int',@p__linq__0=0
我希望它只会比较列是否为空或者它是否具有我通过的值。
喜欢的东西:
WHERE status = 1 AND (regionid IS NULL OR regionid = 0),
例如。
看起来像一个EF自动生成的查询。它“尝试”优化 - 尝试成为关键词......我假设在这种情况下,它正在查看一个“可空”属性并进行相应的转换。 – sgeddes
你真的读过每一个比较吗?它正在做你想做的,它只是更详细的。 – Ellesedil
@Ellesedil感谢您的评论。我知道它确实有效......我只是在想如果有办法让它更清洁。 – Catinodeh