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

时间:2010-01-13 20:06:32

标签: c# linq

我刚刚和LINQ擦肩而过。给出了三个项目列表,这就是我提出的仅显示ClassB项目列表中引用但不在ClassC项目列表中引用的ClassA项目。

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;

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

2 个答案:

答案 0 :(得分:3)

这对我来说很好看。我不知道你需要Distinct()调用。

你可以把它放在一个表达式中,但那可能性较差:

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

有点难读......

答案 1 :(得分:2)

你的解决方案很好。为了提高效率,您可能希望首先创建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;