使用LINQ包含或其他搜索多个字段

时间:2013-06-07 22:38:40

标签: c# linq

我正在使用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();

请原谅愚蠢的字段名称,我必须更改它们以保密。

1 个答案:

答案 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>的结果,否则这可能是不必要的。