如何通过单个属性将两个不同的.NET列表相交? [英] How can I intersect two different .NET lists by a single property?

查看:45
本文介绍了如何通过单个属性将两个不同的.NET列表相交?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图根据Baa的第二个列表中的某些值来过滤我的Foo的第一个列表.

I'm trying to filter my first list of Foo's based on some values in a second list of Baa's.

例如.

这是我在.NET Fiddle上放置的示例 ...

var foos = new List<Foo>
{
    new Foo { Name = "Leia" },
    new Foo { Name = "Han Solo" },
    new Foo { Name = "Chewbacca" },
    new Foo { Name = "Luke" },
};

    var baas = new List<Baa>
{
    new Baa { Alias = "aaaaa" },
    new Baa { Alias = "bbbb" },
    new Baa { Alias = "Leia" },
    new Baa { Alias = "Luke" }
};

// Expected output:
// List<Foo> results = Foo { "Leia" } and Foo { "Luke" };

了解我的要求:通过第二个列表 Alias 属性过滤第一个列表(按 Name ).

See how I'm asking for: Filter the first list (by Name) by the second lists Alias property.

会返回 Foo 的列表,其中有2个结果?

and that will return a List of Foo with 2 results in it?

有任何线索吗?

推荐答案

您可以在 baas 列表上使用 Any :

foos.Where(f => baas.Any(b => b.Alias == f.Name));

或使用联接(查询语法更简洁):

Or use a join (cleaner in query syntax):

var query = 
    from f in foos
    join b in baas on f.Name equals b.Alias
    select f;

这是完全可用的.NET Fiddle中的代码.

这篇关于如何通过单个属性将两个不同的.NET列表相交?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆