代码之家  ›  专栏  ›  技术社区  ›  jball

如何使用LINQ筛选另一个列表中而不是第三个列表中的项目列表

  •  0
  • jball  · 技术社区  · 15 年前

    我刚被林肯弄湿了脚。给出三个项目列表,这是我所想到的,只显示在B类项目列表中引用的A类项目,而不是在C类项目列表中引用的A类项目。

    var uniqueClassAIDsInClassB =
         (from classB in classBList
         select classB.ClassAID).Distinct();
    
    var uniqueClassAIDsInClassC =
         (from classC in classCList
         select classC.ClassAID).Distinct();
    
    var classAListFiltered =
         from classA in GetClassAList()
         where uniqueClassAIDsInClassB.Contains(classA.ID)
               !uniqueClassAIDsInClassC.Contains(classA.ID)
         select classA;
    

    结果列表用作DropDownList的数据源。什么是更清洁/更好的方法?

    2 回复  |  直到 15 年前
        1
  •  3
  •   hackerhasid    15 年前

    这对我来说很好。但我不知道您需要distinct()调用。

    您可以将其放入一个表达式中,但这可能不太可读:

    var classAListFiltered = from classA in GetClassAList()
    where (from classB in classBList select classB.ClassAID).Contains(classA.ID)....
    

    有点难读懂…

        2
  •  2
  •   Ray    15 年前

    你的解决方案很好。为了提高效率,您可能需要先创建a.id列表。

    var uniqueClassAIDsInClassA =
         from id in uniqueClassAIDsInClassB
         where !uniqueClassAIDsInClassC.Contains(id)
         select id;
    
    var classAListFiltered =
         from classA in GetClassAList()
         where uniqueClassAIDsInClassA.Contains(classA.ID)
         select classA;