3

次のコードがあるとします。

var filtered = (from a in lijst select a);

 foreach (string brandstof in checkedListBoxHoofdbrandstof.CheckedItems)
 {
   MessageBox.Show(brandstof);
   filtered =  (from a in lijst where a.Hoofdbrandstof.Contains(brandstof) select a);
 }
 MessageBox.Show(filtered.Count().ToString());
  • lijst約16000項目のクラスのリストです

checkedListBoxHoofdbrandstof.CheckedItems複数の項目が含まれている場合、クエリは最後の where 句の結果のみを使用します。

例: A と B の 2 つの値があり、A が 100 行を返し、B が 50 行を返すという事実にもかかわらず、結果として最後の 50 行のみが含まれます。A は結果に含まれなくなりました。

を使用してみa.Hoofdbrandstof.Anyましたが、型に関するエラーが発生します。も試しa.Hoofdbrandstof.Equalsましたが、同じ結果でした。

これらの結果を組み合わせる方法を知っている人はいますか?

4

1 に答える 1

2

簡単な方法:

var checkedItems = checkedListBoxHoofdbrandstof.CheckedItems;
var filtered = from a in lijst
               where checkedItems.Contains(a.Hoofdbrandstof)
               select a

ただし、結合操作O(n^2)を使用して軽減する場合、このメソッドの複雑さO(n)

var checkedItems = checkedListBoxHoofdbrandstof.CheckedItems.Cast<string>().ToList();
var filtered = from a in lijst
               join checkedItem in checkedItems on a.Hoofdbrandstof equals checkedItem
               select a
于 2013-02-03T23:27:10.200 に答える