c# - 使用linq过滤列表中的列表

标签 c# linq visual-studio-2010

我有一个要根据用户输入过滤的列表。

所以我得到的是:

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/

相关文章:

c# - .Net OpenCV 包装器值得使用吗?

c# - 带有 IN 子句的 SQL 到 LINQ

c# - 如何在 C# 中存储静态数据列表?

c# - 加载 X509Certificate2 结束并出现 Windows Server 2012 上发生内部错误

c# - 内部类型是否会损害良好的 API 设计?

linq - 使用 LINQ 动态映射(或构造投影)

c# - NHibernate - DateTime.DayOfYear LINQ

visual-studio-2010 - xbuild 和 F# (vs2010) 项目

c++ - 即使使用最新的 sdk 也出现 rc1106 错误

visual-studio-2010 - 无法在 IIS 7.5 上运行 ASP.NET MVC 2 Web 应用程序