实体框架,包含和条件运算符(使用charindex而不是像)

时间:2013-07-19 09:35:38

标签: c# entity-framework entity-framework-5

我有以下声明:

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 '%%'

这很有效。

2 个答案:

答案 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)