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包含超过 1 个项目时,查询仅使用最后一个 where 子句的结果。

例如:我有 2 个值,A 和 B,尽管 A 返回 100 行,B 返回 50 行,但结果只包括最后 50 行。A 不再包含在结果中。

我尝试使用a.Hoofdbrandstof.Any,但这会导致有关类型的错误。我也试过a.Hoofdbrandstof.Equals了,结果一样。

有谁知道我可以如何组合这些结果,以便 A 和 B 的结果都在 var 过滤中?

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)使用 Join 操作

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 回答