C# Linq谓词生成器-多个OR
我正在尝试使用PredicateBuilder,如下所述- 下面的代码C# Linq谓词生成器-多个OR,c#,linq,C#,Linq,我正在尝试使用PredicateBuilder,如下所述- 下面的代码 var predicate = PredicateBuilder.False<StreetDTO>(); predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality)); predicate = predicate.Or(p => p.Name.Contains(criteria.Name))
var predicate = PredicateBuilder.False<StreetDTO>();
predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality));
predicate = predicate.Or(p => p.Name.Contains(criteria.Name));
predicate = predicate.Or(p => p.Town.Contains(criteria.Town));
List<StreetDTO> streetData = StreetData.Instance();
var streetList = from street in streetData.Where(predicate)
select street;
但我得到的只是
方法的类型参数出现错误1
'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,
System.Func“”不能为空
从用法推断。尝试
指定类型参数
明确地说
我想了解一下LINQ的“在职”,如果这是一个简单的问题,我深表歉意。试着编译你的谓词:
var streetList = from street in streetData.Where(predicate.Compile())
select street;
啊,;您的列表正在使用
IEnumerable
扩展方法(而不是IQueryable
)-请尝试:
就是这个-谢谢!我需要给自己买一本像样的Linq书,我不认为这是你可以在活着的时候学到的东西……Linq in Action,或者《C#深入》的后面几章都很好。谢谢Marc关于Linq in Action的提示。=)谢谢,这也行得通,尽管我在其他地方找到了与他的答案相匹配的另一个答案,所以我把马克标记为答案。我不确定哪种方式是首选方式?@Duncan,我也不确定witch是首选方式:(这与linq的工作方式有关,它的内部很神奇。我不相信如果您使用其中一种方式,在性能方面会遇到任何重大问题。感谢您让我知道PredicateBuilder!!
var streetList = from street in streetData.Where(predicate.Compile())
select street;
var streetList = from street in streetData.AsQueryable().Where(predicate)
select street;