选择同一列上的多个位置

时间:2013-02-03 23:20:49

标签: c# linq linq-to-objects

给出以下代码:

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过滤的?

1 个答案:

答案 0 :(得分: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