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

C# 当两个值都添加了字符串时,如何执行Linq LIKE或Contains,c#,sql,linq,sql-like,contains,C#,Sql,Linq,Sql Like,Contains,我正在尝试编写一个Linq查询,以在数据库列中查找一个匹配的值,该列是一个逗号分隔的值字符串。为了确保我不匹配其中一个值的一部分,或者错过第一个或最后一个值,我通常在目标和源的开头和结尾都添加一个逗号。不幸的是,这不适用于Linq,我还没有弄明白如何使用SqlMethods,就像在本文中一样。我的代码: int totalItems = 0; var userList = from r in db.User select r; if (!string.IsNul

我正在尝试编写一个Linq查询,以在数据库列中查找一个匹配的值,该列是一个逗号分隔的值字符串。为了确保我不匹配其中一个值的一部分,或者错过第一个或最后一个值,我通常在目标和源的开头和结尾都添加一个逗号。不幸的是,这不适用于Linq,我还没有弄明白如何使用SqlMethods,就像在本文中一样。我的代码:

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)
);

你能展示一下
r.roles
filter.roles
的样子吗?你得到的确切错误是什么?您可能还应该使用“
”、“+r.roles.Trim()+”、“
(字符串连接)而不是字符连接。它与普通的C#代码没有区别,但当查询提供程序将您的查询转换为SQL时,可能会出现问题。例如:r.roles=“Staff,Administrator”;filter.roles=“管理员”。