在我的一个数据库字段中,我的数据如下:
value1, value2, value3
我的搜索参数可以是value1或value2或value3
我想要做的是使用linq查询来获取实体列表,例如value2在“value1,value2,value3”
中此外,值在commma之后按空格分隔。
我尝试使用以下linq查询但遇到了一个错误,指出不允许使用数组操作。
List<Players> c = (from p in db.Players
where (p.Users == "Everyone" || p.Users.Split()[','].Trim().Contains(username))
orderby p.Category ascending
select p).ToList();
任何想法如何实现这一目标?
答案 0 :(得分:6)
你没有正确地做Split
,它应该是:
p.Users.Split(',').Contains(username)
如果您想要Trim
每个分割值,那么:
p.Users.Split(',').Select(r=> r.Trim).Contains(username)
如果您正在使用LINQ to Entities,那么最终可能会出现string.Split
无法转换为SQL查询的异常。在这种情况下,您可能必须首先迭代(ToList
)结果,然后将其与拆分数组进行比较。
答案 1 :(得分:0)
使用需要字符串拆分匹配的数据模型并不是一个好习惯。因为它会导致系统效率低下,更不用说慢速查询了。但是,如果你真的需要一个解决方案,为什么不试试这个 - 。
有四次你会得到一场比赛,
考虑到我建议下面的解决方案 -
username is the value looking for say "1"
string prefixMatch = username + ",";
string suffixMatch = ", " + username;
string innerMatch = ", " + username + ",";
List<Players> c = (from p in db.Players
where (p.Users == "Everyone" || (p.StartsWith(prefixMatch) ||
p.Contains(innerMatch) || p.EndsWith(suffixMatch) ||
(!p.Contains(",") && p == username)))
orderby p.Category ascending
select p).ToList();
此查询将支持LINQ-TO-SQL转换