我有一个我想根据用户输入过滤的列表。
所以我得到的是:
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,Name,Vat和IndustryLang对象的可能列表(因此为空检查)的对象列表。这样的IndustryLang对象包含一个ID,一个LanguageID来检查它是哪种语言和一个Name。
我需要的是能够过滤IndustryLanguage的名称。
这可能只是一个小错误,但我似乎没有找到它。任何帮助表示赞赏!感谢。
答案 0 :(得分:2)
如果您想获取fullList中的条目,其中至少有一个IndustryLang具有包含过滤条件的名称,请替换'其中'条款由任何'并在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();
答案 1 :(得分:1)
这是你的意思吗?
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();
我添加了一些括号。
答案 2 :(得分:0)
我可能会误解你的问题,而且我是Linq的新手。但此时的语言列表不仅仅是属于该特定公司的列表。在我看来,测试语言包含你的过滤字符串的条件更像是这样:
w.IndustryLang != null &&
w.IndustryLang.Select(s => s.Name.ToLower()).Contains(filterString.ToLower())