【发布时间】:2014-07-14 09:51:34
【问题描述】:
是否可以在 LINQ Join 方法中检查第一个对象(不)是否等于第二个对象?
例如,
假设我用 Name 和 Number 属性实现了 SomeData 类。我创建了这个类的三个不同实例并将它们存储在 List 对象中。
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
});
但是,当这个查询执行时,即使 first 和 second 是相同的实例,它也会创建对象。有没有办法检查这个内部查询?类似的东西
var joinedData = data
.Join(first => first.Number,
second => second.Number,
if (first != second)
{
(first, second) => new SomeData
{
...
}
});
我唯一真正想要的是我得到“非 SQL 类语法”的答案。
编辑1: 当前输出带代码
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
会很好。
【问题讨论】:
-
能否为您展示的样本数据提供所需的输出?
-
"非 SQL 类语法" = Lambda
-
你到底想在这里做什么?即使您删除了名称相同的条目,您仍然会得到一个“Ann & Vicky”和另一个“Vicky & Ann”。
-
@BenAaronson 我不是要比较名称(对象的属性),而是对象本身 - 例如if(v != s),而不是 if(v.Name != s.Name)