4

これは私が遭遇した最も一般的なエラーのようです-それに関する複数のSO投稿はすべて異なる問題を参照しています-まあ、ここに新しい問題があります:)

IQueryable以下が列挙されている場合、上記のエラーが発生します。

NBitemsは でIQueryable<tblItem>ありkeywordsstring

items = items.Where(p => p.heading.ToLower().Contains(keywords) || 
                         p.description.ToLower().Contains(keywords));

エラーが示唆するように、a を使用すると正常に動作するはずなので、これは混乱を招きますContains

4

3 に答える 3

2

キーワードが列挙をサポートするコレクションである場合は、逆にする必要があります。

items = items.Where(p => keywords.Contains(p.heading.ToLower()) || 
                         keywords.Contains(p.description.ToLower()));
于 2012-12-19T09:31:48.403 に答える
1

解決済み

あなたの入力にsgmooreに感謝します-それはこの解決策に到達するのを助けました:

リストをリストに関連付け、IQueryableリストをIEnumerable実行してから、リストToListのフィルターを使用するとうまくいきました。

IEnumerable<tblItems> temp = items.ToList();

temp = temp.Where(p => p.heading.ToLower().Contains(keywords) || 
                     p.description.ToLower().Contains(keywords));

items = temp.AsQueryable();
于 2012-12-19T10:36:59.330 に答える
1

items が IQueryable の場合、エラーが発生している可能性があり、where ステートメントとは関係ありません。whereステートメントを追加する前に列挙を強制してみてください。

たとえば、メモリ内リストをデータテーブルと結合しようとすると、クエリが評価または列挙されるときにそのエラーが発生します

List<tblCategory> categories = tblCategory.ToList();

IQueryable<tblItem> items = (from r in tblItem 
            join c in categories on r.CategoryID equals c.Id select r);


//    items = items.Where(p => p.heading.ToLower().Contains(keywords) || 
//                             p.description.ToLower().Contains(keywords));



var firstMatch = items.FirstOrDefault();

// The error will be generated here even if the where is remmed out 
于 2012-12-19T10:01:52.590 に答える