gpt4 book ai didi

c# - Linq 相交或连接以将一个集合中具有匹配属性的项目返回到另一个集合?

转载 作者:行者123 更新时间:2023-11-30 16:27:46 24 4
gpt4 key购买 nike

我有以下场景:两个不同 Types 的列表恰好包含 3 个匹配的属性(实际上,名称不相同,因为它们来自不同的系统/数据库表,但它们的内容匹配)。

在我的示例中,我将属性命名为相同的名称只是为了更容易!

我想为在查找中有匹配项的帐户获取 Prefix+Number+Suffix 的列表(注意:查找可以多次包含相同的值 - 其余的对象中的属性不同)

这是我目前正在使用的代码,但感觉很笨拙。是否有更清洁、更好的方法来实现相同的结果?我尝试了“Contains()”,但不确定如何限制所有三个属性。

    var accounts = new List<Account>{
new Account{Prefix="001", Number="10101", Suffix="666"},
new Account{Prefix="001", Number="10202", Suffix="777"},
new Account{Prefix="001", Number="10303", Suffix="777"},
new Account{Prefix="002", Number="20101", Suffix="666"},
new Account{Prefix="002", Number="20101", Suffix="777"}
};

var lookup = new List<Lookup>{
new Lookup{Prefix="001", Number="10101", Suffix="666"},
new Lookup{Prefix="001", Number="10101", Suffix="666"},
new Lookup{Prefix="002", Number="20101", Suffix="666"},
new Lookup{Prefix="001", Number="10101", Suffix="666"},
};

var match = ((from a in accounts
select a)
.Intersect(from l in lookup
from a in accounts
where l.Prefix == a.Prefix &&
l.Number == a.Number &&
l.Suffix == a.Suffix
select a)
).Select(a => string.Format("{0}{1}{2}", a.Prefix, a.Number, a.Suffix));

最佳答案

您可以使用以下代码来获取匹配项:

var match = (from a in accounts
select new { P = a.Prefix, N = a.Number, S = a.Suffix })
.Intersect(from l in lookup
select new { P = l.Prefix, N = l.Number, S = l.Suffix })
.Select(t => string.Format("{0}{1}{2}", t.P, t.N, t.S));;

您在这里使用 automatically generated equality anonymous types 上的运营商.

关于c# - Linq 相交或连接以将一个集合中具有匹配属性的项目返回到另一个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com