实体框架,包含和条件运算符(使用charindex insted等)

本文关键字:charindex 使用 insted 条件运算符 框架 包含 实体 | 更新日期: 2023-09-27 18:23:58

我有以下语句:

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永远不会大于0。这是EF中的一个错误,还是有什么我不明白的地方。从追踪其他类似的语句中,我看到EF翻译

l.StreamName.Contains("")

进入

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

这是有效的。

实体框架,包含和条件运算符(使用charindex insted等)

只需有条件地添加此筛选即可。不要试图生成like '%%'(实际上这毫无意义)

if (vid == user.Username)
   query = query.Where(l => l.StreamName.Contains("live"));

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

.Where(l =>vid == user.UserName ? l.StreamName.Contains("live") : true)