鉴于以下代码:

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

    最佳答案

    简单的方法:

    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
    

    关于c# - 在同一列上选择多个位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14678526/

    10-12 00:27