如何使用LINQ来过滤另一个列表中的项目列表,而不是第三个项目
问题描述:
我只是用LINQ弄湿了自己的脚。给定三个项目列表,这是我想出来的只显示ClassB项目列表中引用的ClassA项目,但不在ClassC项目列表中。如何使用LINQ来过滤另一个列表中的项目列表,而不是第三个项目
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;
所得列表被用作下拉列表数据源。什么是更清洁/更好的方式来做到这一点?
答
这对我来说很好。我不知道你需要Distinct()调用。
你可以把它放到一个表达,但可能是不易阅读:
var classAListFiltered = from classA in GetClassAList()
where (from classB in classBList select classB.ClassAID).Contains(classA.ID)....
是有点难以阅读...
答
你的解决方案是好的。为了提高效率,您可能需要先创建一个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;
+1不同的是不必要的,语句可以合并 – 2010-01-13 20:14:19
哈 - 是啊,没有注意到含混的语句的冗余。感谢您的反馈! – jball 2010-01-13 20:49:43
一些代码评论消除了可读性问题,现在对我来说这绝对看起来更清爽。再次感谢! – jball 2010-01-13 21:18:34