我有以下声明:
l.StreamName.Contains(vid == user.Username ? "live" : "")
当我在服务器端捕获SQL时,这将转换为以下SQL:
CAST(
CHARINDEX(
CASE WHEN ('asdfg' = 'dfghy')
THEN N'live'
ELSE N''
END,
[Extent1].[StreamName]
) AS int)
) > 0
由于''的charindex永远不会>因此显然不起作用。这是EF中的一个错误还是我不明白的东西。通过追踪其他类似的陈述,我看到EF翻译
l.StreamName.Contains("")
进入
[Extent1].[StreamName] like '%%'
这很有效。
答案 0 :(得分:1)
只需有条件地添加此过滤。不要试图生成like '%%'
(实际上没有意义)
if (vid == user.Username)
query = query.Where(l => l.StreamName.Contains("live"));
答案 1 :(得分:0)
好吧,你应该做那样的事情(如果你展示更多代码会更容易)
.Where(l =>vid == user.UserName ? l.StreamName.Contains("live") : true)