以下は、この問題を説明するためのサンプル データです。
tblPrimary
1, John, 2011-01-03T11:12:00z
2, John, 2011-02-04T10:54:12z
tblDetail:
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04
上記の例のテーブルを使用すると、tblPrimary.Name の名前に関連付けられたすべての詳細レコードを返す必要がある「名前」が与えられます。tblPrimary.Name は一意ではないため重複がありますが、日付と時刻が異なるため、実際には異なる項目です。
SQLMetal を使用すると、オブジェクトが 2 つのテーブル間の関係を処理するようにコードが生成されます。これを念頭に置いて、次のようにクエリを作成します。
var q = from i in dbcontext.tblDetail
where i.tblPrimary.Name == 'John' && i.PrimaryId == i.tblPrimary.PrimaryId
select i;
上記の例のデータを使用して、異なる DateAdded を持つ tblPrimary に 2 つの「John」があり、各 John の tblDetail に 2 つのレコードがある場合、クエリによって返される結果は次のようになります。
John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04
John - 2011-02-04T10:54:12z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04
私が本当に望んでいるのはこれです:
John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
John - 2011-02-04T10:54:12z
3, 2, 10, Dept03
4, 2, 17, Dept04
Joinsを使用せずにこのLinqクエリを解決する方法を誰かが提案できますか? sqlmetal によって生成された 2 つのテーブル間のリレーションシップは、既に結合を処理する必要があると思います。