给定以下代码:
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