我正在使用LINQ在单个短语上搜索多个字段,而我正在使用Contains()
来执行此操作。直到今天,当我注意到find方法无法正常工作时。
所以我希望能够搜索有匹配的每个字段。我已经在Google上进行了一些搜索并通过搜索引擎优化并找到了使用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();
请原谅愚蠢的字段名称,我必须更改它们以保密。
答案 0 :(得分: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)));
但是如果您正在使用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();
当然,此处的字段名称可能不同,因为参数x
可能是不同的类型。如果没有进一步的信息,您可以正确编写此过滤器。
请注意,在这两个示例中,我都删除了对ToList
的调用。除非您绝对需要List<T>
的结果,否则这可能是不必要的。