我将尝试制作一个带有自定义比较器的左连接查询。
我有以下列表:
我的问题是:如何在左外连接时同时使用比较器?据我所知,查询语法没有比较器的关键字,扩展方法也没有适用于
我有以下列表:
List<ColumnInformation> list1;
List<ColumnInformation> list2;
这些保存了关于SQL列的信息(数据类型、名称、表等)。我已经重写了该类的Equals
方法,并创建了一个operator ==
和operator !=
。
我理解如何进行左外连接:
var leftOuterJoin = from l1 in list1
join l2 in list2 on l1.objectID equals l2.objectID into temp
from l2 in temp.DefaultIfEmpty(new { l1.ID, Name = default(string) })
select new
{
l1.ID,
ColumnName1 = l1.Name,
ColumnName2 = l2.Name,
};
我知道如何制作和使用自定义的IEqualityComparer
:
public class ColumnComparer : IEqualityComparer<ColumnInformation>
{
public bool Equals(ColumnInformation x, ColumnInformation y)
{
return x == y; //this uses my defined == operator
}
public int GetHashCode(ColumnInformation obj)
{
return 1; //forcing the join to use Equals, just trust me on this
}
}
ColumnComparer cc = new ColumnComparer();
var joinedList = list1.Join(list2,
x => x,
y => y,
(x, y) => new {x, y},
cc);
我的问题是:如何在左外连接时同时使用比较器?据我所知,查询语法没有比较器的关键字,扩展方法也没有适用于
into
关键字的任何内容。我不在意结果是使用查询语法还是扩展方法。
ColumnInformations
中在 ColumnComparer 中实现的 Equals 和 GetHashCode 方法。 - Hamlet HakobyanColumnInformation
中重写了Equals
。现在我的代码没有触及它。这样做有什么好处(包括GetHashCode
)? - gunr2171GroupJoin
是什么意思。如果您能提供一个例子,我会非常高兴。 - gunr2171