【发布时间】:2016-08-19 18:55:19
【问题描述】:
我有一个 IEnumerable,我正在通过 .Where 表达式对其应用多个过滤器。我的代码看起来像这样
public List<MyObject> FilteringFunction(List<MyObject> listToFilter, List<Filter> filters)
{
// A dirty way to have an enumerable instead of List
var enumerableToFilter = listToFilter.Where(x => true);
foeach(var filter in filters)
{
enumerableToFilter = enumerableToFilter.Where(x => x.Value.Contains(filter.Value));
}
return enumerableToFilter.ToList();
}
我是否只会遍历我的收藏集一次? (因为我只有一个使用 LINQ to SQL 的数据库调用)
【问题讨论】:
-
您的代码没有多大意义...如果您有不同值的过滤器,过滤后的结果将始终为空
-
@ThomasLevesque 除非你已经覆盖了
==使得不相等的对象返回true。 (并不是说这样做是明智的。) -
@ThomasLevesque,对不起,我正在简化实际代码以使其更具可读性并过度简化。实际的 where 语句并不简单 == ,而是更复杂。例如,我将纠正我的问题并将其设为 .Contains()。
-
@ThomasLevesque 在实际代码中有不同种类的过滤器(等于、包含、startwith、更大、更小等)应用于 MyObject 的不同字段
-
顺便说一句,将列表转换为 IEnumerable 的一种不太脏的方法是使用
.AsEnumerable()扩展方法。
标签: c# performance linq linq-to-entities ienumerable