我刚刚和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;
结果列表用作下拉列表的数据源。什么是更清洁/更好的方法呢?
答案 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;