我有一个要根据用户输入过滤的列表。
所以我得到的是:
var fullList = BLogic.GetDataStoreCompaniesForFilterList();
var filterList = fullList
.Where(w =>
w.Name.ToLower().StartsWith(filterString.ToLower()) || filterString.Length > 2 &&
w.Vat.ToLower().Contains(filterString.ToLower()) || w.IndustryLang != null &&
w.IndustryLang.Where(ww => ww.LanguageId == usrX.LanguageId)
.Select(s => s.Name.ToLower())
.Contains(filterString.ToLower())
).ToList();
更具体地说,过滤器查询的最后一部分给我带来了麻烦:
w.IndustryLang != null &&
w.IndustryLang.Where(ww => ww.LanguageId == usrX.LanguageId)
.Select(s => s.Name.ToLower()).Contains(filterString.ToLower())
完整列表是包含 ID、名称、增值税和可能的 IndustryLang 对象列表(因此进行空检查)的对象列表。这样的 IndustryLang 对象包含一个 ID、一个用于检查它是哪种语言的 LanguageID 和一个名称。
我需要的是能够根据 IndustryLanguage 的名称进行过滤。
这可能只是一个小错误,但我似乎没有找到它。任何帮助表示赞赏!谢谢。
最佳答案
如果要获取 fullList 中至少一个 IndustryLang 的名称包含过滤条件的条目,请将“where”子句替换为“any”,并将条件包含在 IndustryLang 对象中,如下所示:
var fullList = BLogic.GetDataStoreCompaniesForFilterList();
var filterList = fullList
.Where(w =>
w.Name.ToLower().StartsWith(filterString.ToLower()) || filterString.Length > 2 &&
w.Vat.ToLower().Contains(filterString.ToLower()) || w.IndustryLang != null &&
w.IndustryLang.Any(ww =>
ww.LanguageId == usrX.LanguageId &&
ww.Name.ToLower().Contains(filterString.ToLower()))
).ToList();
关于c# - 使用linq过滤列表中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588678/