如何使用LINQ to Object从两个列表中筛选并创建一个列表

5
我想知道是否有一种使用Linq to Object的方式,通过过滤另外两个列表来获取一个列表。 我有两个对象A和B列表,它们之间由属性(Code: String)相关联。B具有另一个属性Name:String。
我想要获取符合以下两个条件的A对象列表:
- 所有A对象必须将其A.Code属性与B列表中任何B.Code属性匹配。 - B.Name必须为"yoda"。
我尝试了这段代码(还有其他示例),但似乎没有起作用,我不知道为什么。我刚开始学习linQ。
List<A> FilteredAList = (from OneA in ListOfA
                         join  OneB in ListOfB
                         on OneA.Code equals OneB.Code
                         where OneB.Name == "yoda"
                         select  OneA).ToList<A>();

提前感谢!


刚刚测试了一下,结果显示为0,尽管B列表中有几个Yodas,而且b列表中有几个与A代码匹配的代码。 - Dante Snow
你是在谈论我在答案中发布的代码吗?如果是,我确定ListOfB.Name="yoda"的元素没有与ListOfA中任何一个匹配的Code。这两个条件都应该被考虑到。你可以发布ListOfBListOfA的样本数据,这样我就可以进行测试。 - King King
1个回答

5

根据您的需求,我认为我们应该使用Any方法,因此我们应该编写method query而不是expression query。当然我不知道在expression query中等效的Any是什么(至少应该像method query中那样简短,否则就不好)。如果有人知道,请留下评论。感谢。

var FilteredAList = ListOfA.Where(x=>ListOfB.Any(y=>x.Code==y.Code && y.Name=="yoda"))
                           .ToList<A>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接