Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq谓词生成器-多个OR_C#_Linq - Fatal编程技术网

C# Linq谓词生成器-多个OR

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))

我正在尝试使用PredicateBuilder,如下所述-

下面的代码

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;