0

以下は、この問題を説明するためのサンプル データです。

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 つのテーブル間のリレーションシップは、既に結合を処理する必要があると思います。

4

1 に答える 1