left outer join
も含むクエリを作成しようとしていますcustom comparator
。
次のリストがあります。
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
。
結果がクエリ構文であるか拡張メソッドであるかは気にしません。