LINQ -检查连接内部是否相等
本文关键字:是否 内部 连接 检查 LINQ | 更新日期: 2023-09-27 18:12:41
是否可以检查LINQ Join方法中第一个对象(不)是否等于第二个对象?
例如,假设我实现了带有Name和Number属性的SomeData类。我为这个类创建了三个不同的实例,并将它们存储在List<> object中。
List<SomeData> data = new List<SomeData>();
SomeData a = new SomeData();
SomeData p = new SomeData();
SomeData v = new SomeData();
a.Name = "Ann";
a.Number = 1;
p.Name = "Peter";
p.Number = 4;
v.Name = "Vicky";
v.Number = 1;
data.Add(a);
data.Add(p);
data.Add(v);
现在,我想得到一个新的SomeData对象,它是用两个SomeData实例在数据列表中创建的,具有相同的Number属性。
var joinedData = data
.Join(first => first.Number,
second => second.Number,
(first, second) => new SomeData
{
Name = first.Name + " & " + second.Name,
Number = first.Number
});
然而,当这个查询执行时,即使第一个和第二个是相同的实例,它也会创建对象。有没有办法检查这个内部查询?就像
var joinedData = data
.Join(first => first.Number,
second => second.Number,
if (first != second)
{
(first, second) => new SomeData
{
...
}
});
我唯一想要的是,我得到答案在"非sql类语法"。
EDIT1:代码
的当前输出foreach(SomeData sd in joinedData)
{
Console.Writeline (sd.Name)
}
Peter & Peter
Vicky & Vicky
Vicky & Ann
Ann & Vicky
Ann & Ann
,期望输出为
Ann & Vicky
对,实际上上面是理想的输出,但是,
Ann & Vicky
Vicky & Ann
Join在默认情况下是这样做的(即使用x = equals (y)的默认比较器)
如果你需要一个自定义的比较,你可以使用重载,你给一个IEqualityComparer(见MSDN)
var myComparer = new MyComparer(); //Must implement IEqualityComparer<T>
var joinedData = data.Join(other, first => first.Number, second => second.Number, (first, second) => {...}, myComparer);