c# - 当两个值都添加了字符串时,如何执行 Linq LIKE 或 Contains

标签 c# sql linq sql-like contains

我正在尝试编写一个 Linq 查询来在数据库列中查找一个匹配的值,该值是逗号分隔的值字符串。为了确保我不匹配其中一个值的一部分,或者错过第一个或最后一个值,我通常在目标和源的开头和结尾添加逗号。不幸的是,这不适用于 Linq,而且我还没有弄清楚如何在这种情况下使用 SqlMethods.Like。我的代码:

int totalItems = 0;

var userList = from r in db.User
               select r;

if (!string.IsNullOrEmpty(filter.department))
{
    userList = userList.Where(s => s.department.Contains(filter.department));
}
if (!string.IsNullOrEmpty(filter.role))
{
    // The following code that includes commas in the strings 
    // causes a runtime error regarding simple or enumerated objects:
    userList = userList.Where(
        r => (','+r.roles.Trim()+',').Contains(','+filter.role.Trim()+',')
    );

    // The following code works, but is not what I need to do the search properly:
    //userList = userList.Where(s => s.roles.Contains(filter.role));
}

totalItems = userList.Count(); // here is where the error actually occurs

我不介意使用 SqlMethods.Like,但不知道在修改这样的查询时如何使用它。

最佳答案

试试这个:

userList = userList.Where(
    r => (r.roles.Split(',')).Any(o => o == filter.role)
);

关于c# - 当两个值都添加了字符串时,如何执行 Linq LIKE 或 Contains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235615/

相关文章:

c# - 尝试使用 mvc 上传文件时 Request.Files 为空

c# - 方法覆盖和可选参数

c# - 如何更改 Silverlight 使用的默认字体?

mysql - 如何将所有值列表添加到 mysql 数据库并继续添加,即使有重复的主键?

sql - bash 脚本 curl 命令中的单引号不断转换为双引号

mysql - 可以在 WHERE 中执行 UPDATE 子句吗?

c# - 使用 LINQ 将属性值与字典键匹配

c# - 对从 Linq 查询访问私有(private)变量感到困惑

c#-Windows 窗体 - 如何在列表框中找到 href 更多链接?

c# - 使用 XElement 追加 XML