3

我有以下声明:

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

Witch 显然不起作用,因为 '' 的 charindex 永远不会 > 0。这是 EF 中的错误还是我不明白的地方。通过跟踪其他类似的语句,我看到 EF 翻译

l.StreamName.Contains("")

进入

[Extent1].[StreamName] like '%%'

这有效。

4

2 回答 2

1

只需有条件地添加此过滤即可。不要尝试生成like '%%'(实际上它没有意义)

if (vid == user.Username)
   query = query.Where(l => l.StreamName.Contains("live"));
于 2013-07-19T09:45:08.323 回答
0

好吧,你应该做这样的事情(如果你显示更多代码会更容易)

.Where(l =>vid == user.UserName ? l.StreamName.Contains("live") : true)
于 2013-07-19T09:46:32.007 回答