简体   繁体   English

如何通过单个属性将两个不同的.NET列表相交?

[英]How can I intersect two different .NET lists by a single property?

I'm trying to filter my first list of Foo's based on some values in a second list of Baa's. 我试图根据第二个Baa列表中的某些值来过滤我的第一个Foo列表。

For example. 例如。

Here's an example I put up on .NET Fiddle ... 这是我在.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" };

See how I'm asking for: Filter the first list (by Name ) by the second lists Alias property. 看看我的要求:通过第二个列表Alias属性过滤第一个列表(按Name )。

and that will return a List of Foo with 2 results in it? 这将返回一个Foo列表,其中包含2个结果?

Any clues? 有线索吗?

You can use Any on the list of baas : 您可以在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;

Here's the code in a full working .NET Fiddle. 是完整的.NET Fiddle中的代码

You could use Join : 你可以使用Join

var results = foos.Join(baas, f => f.Name, b => b.Alias, (f, b) => f);

Similar to this answer . 此答案类似。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM