2009-05-18 10 views
15

、ここで説明したように、私は、PredicateBuilderを使用しようとしている - http://www.albahari.com/nutshell/predicatebuilder.aspxLINQの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; 

は、に従って例

var newKids = Product.ContainsInDescription ("BlackBerry", "iPhone"); 

var classics = Product.ContainsInDescription ("Nokia", "Ericsson") 
         .And (Product.IsSelling()); 
var query = 
    from p in Data.Products.Where (newKids.Or (classics)) 
    select p; 

が、私が得るすべては

です方法 'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable、 System.Func)' のの

エラー1型引数は、使用から を推測することはできません。タイプ引数 を明示的に指定して、 を試してください。

私はLINQの「仕事中」で理解を得ようとしています。これは簡単な質問であれば謝ります。

+0

感謝を! – Romias

答えて

18

ああ。あなたのリストは(というよりもIQueryable<T>IEnumerable<T>拡張メソッドを使用している - してみてください:私はPredicateBuilder知らせるため

var streetList = from street in streetData.AsQueryable().Where(predicate) 
       select street; 
+0

それは1つです - ありがとう!私はまともなLinqの本を手に入れる必要がありますが、私はそれがあなたの蹄に学ぶことができるとは思わない... – Duncan

+2

LINQ in Action、またはそれ以降の章C#の深さはかなり良いです。 –

+0

MarcさんがLINQ in Actionについての感想をお寄せいただきありがとうございます=) –

11

はあなたの述語をコンパイルしてみてください。

var streetList = from street in streetData.Where(predicate.Compile()) 
       select street; 
+0

ありがとう、これはまた働いていましたが、私は他の場所で彼と一致する別の答えを見つけたので、答えとしてマークをマークしました。どちらの方法が優先されるのかよくわからないのですか? – Duncan

+0

@ダンカン、私は魔女が好きな方法であるとは思っていません:(これはlinqが魔法*内部*の仕組みと関係しています。 –

関連する問題