我正在使用LINQ在单个短语上搜索多个字段,而我正在使用Contains()它.直到今天,当我注意到find方法无法正常工作时.
所以我希望能够搜索有匹配的每个字段.我已经在谷歌和SO上做了一些搜索并找到了使用建议Any()?有没有人有什么建议?
var l = _getData().Select(_marshallData).ToList();
return l.Where(x => x.Name.Contains(what) || x.Pumpkin.Contains(what) || x.Orange.Contains(what) || x.Tomato.Contains(what)).ToList();
Run Code Online (Sandbox Code Playgroud)
请原谅愚蠢的字段名称,我必须更改它们以保密.
p.s*_*w.g 10
既然您已经实现了数据,那么您可以这样做:
var l = _getData().Select(_marshallData).AsEnumerable();
return l.Where(x => new[] { x.Name, x.Pumpkin, x.Orange, x.Tomato }.Any(s => s.Contains(what)));
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在使用ORM(如实体框架),这个技巧可能无法工作(因为很有可能无法将其转换为SQL表达式).在这种情况下,您的原始解决方案很好,但在实现数据之前执行此操作可能会更好.
return _getData()
.Where(x =>
x.Name.Contains(what) || x.Pumpkin.Contains(what) ||
x.Orange.Contains(what) || x.Tomato.Contains(what))
.Select(_marshallData)
.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)
当然,这里的字段名称可能不同,因为参数x可能是不同的类型.如果没有进一步的信息,您可以正确编写此过滤器.
请注意,在这两个示例中,我已经删除了对的调用ToList.除非你绝对需要结果,否则List<T>这可能是不必要的.