【问题标题】:How to create a list from filtering 2 lists with linq to object如何从使用 linq 到对象的过滤 2 个列表中创建一个列表
【发布时间】:2013-08-12 00:13:12
【问题描述】:

我想知道是否有办法使用 Linq 反对从过滤其他 2 个列表中获取列表。 我有两个对象 A 和 B 的列表,它们通过属性(代码:字符串)相互关联。 B 有另一个属性,名称:字符串。

我想获取满足 2 个条件的 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代码匹配的代码。
  • 您是在谈论我在答案中发布的代码吗?如果是这样,我确定ListOfB 中具有.Name="yoda" 的元素没有Code 匹配ListOfA 中的任何元素。这两个条件都应该考虑。你可以把ListOfBListOfA的样本数据贴出来让我测试一下。

标签: c# linq linq-to-objects


【解决方案1】:

根据您的要求,我认为我们应该使用Any 方法,因此我们应该写method query 而不是expression query。当然,我不知道expression query 中的Any 的等价物(至少它应该像method query 中那样short,否则就不好了)。如果有人知道,请发表评论。谢谢。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多