我需要一个Linq语句,它将从一个表中选择所有字段,其中一个字段包含列表中的所有元素,而不管单词搜索整个字符串的其他字段
它基本上只是一个包含在内的单词搜索字段,其中所有单词都需要在记录中,字符串搜索其他字段
即我有一个查找屏幕,允许用户搜索整个搜索字符串的AccountID或详细信息,或搜索clientID中包含单词的单词,如果我可以找出ClientId组件,则将其展开到详细信息字段
复杂的是,正在搜索AccountId和Detail,这基本上阻止了我在第二个例子中做了foreach,因为“ors”
示例1,当我在之后执行query.Count()时,这会给我一个以下错误
query.Count(); 'query.Count()'引发了一个'System.NotSupportedException'类型的异常int {System.NotSupportedException}
+ base {“本地序列不能用于查询运算符的LINQ to SQL实现,但Contains运算符除外。”} System.SystemException {System.NotSupportedException}
var StrList = searchStr.Split(' ').ToList();
query = query.Where(p => p.AccountID.Contains(searchStr) || StrList.All(x => p.clientID.Contains(x)) || p.Detail.Contains(searchStr));
示例2,这给了我任何搜索词类型结果
var StrList = searchStr.Split(' ').ToList();
foreach (var item in StrList)
query = query.Where(p => p.AccountID.Contains(searchStr) || p.clientID.Contains(item) || p.Detail.Contains(searchStr));
感谢您的提前时间,任何帮助将不胜感激
编辑 - 更多信息
我有一个包含3个字段的表,AccountID,ClientId,Details
记录 Id,AccountID,CLientId,详细信息
1,“123223”,“bobo and co”,“此客户suxs”
2,“654355”,“Jesses hair”,“我们喜欢这个客户和东西”
3,“456455”,“微软”,“我们喜欢Mircosoft”
搜索exmaples
searchStr =“232” 返回记录1;
searchStr =“bobo hair” 不返回任何记录
searchStr =“bobo and” 返回记录1
searchStr =“123 bobo and” 返回什么都不返回
这里的想法是 如果客户输入部分AccountId,则返回东西, 如果客户想要搜索ClientId,他们可以通过搜索词来键入和取消客户端,即单词列表。由于客户端数量众多,ClientID需要包含所有单词(按任意顺序)
我知道这看起来很奇怪,但它只是一个以强大的方式查找帐户的简单界面
答案 0 :(得分:1)
我认为您的问题有两种解决方案。
一种是将结果计算在内存中,如下所示:
int count = query.ToList().Count();
另一个是不在您的查询中使用All
:
var query2 = query;
foreach (var item in StrList)
{
query2 = query2.Where(p => p.clientID.Contains(item));
}
var result = query2.Union(query.Where(p => p.AccountID.Contains(searchStr) || p.Detail.Contains(searchStr)));
最后的Union
在两个查询之间就像OR
一样。