1

今日、私はこの質問をしますが、何かを見逃したので、この質問で詳しく説明しません。

私は3つのテーブルを持っています:

[Table1]
 - ID // Unique
 - Name
 - Location
 - Country

[Table2]
 - ID - Unique
 - Table1.ID
 - Value

[Table3]
 - Table2.Value
 - LN
 - Name

関係:

1 つの Table1.ID から複数の Table2.Table1.ID

私が必要としているのは、次のような結果が得られる ling-to-sql クエリです

  1. Table1 からすべてを取得
  2. Table2.Table1.ID 内のすべての Table1.ID について、Table2.Value を配列 (int) として取得します。
  3. すべての Table2.value を array(int) として、配列文字列 Table3.Name を取得します。ここで、Table2.Value は Table3.Table2.Value と等しく、LN = "en" です。

例:

表1

 ID |  Name    |  Location    |   Country   |
  1 | TestName | TestLocation | SomeCountry |

表2

 ID  |  FK | Val |
  1  |  1  |  5  | 
  2  |  1  |  7  |

表3

Val | Ln |  Name     |
  5 | en | Testname1 |
  7 | en | Testname2 |

結果:

1,TestName,TestLocation,SomeCountry,List<string>{Testname1,Testname2}

私の ling to sql クエリは Table2.Value のみを List として取得します。変更を加えることができるかもしれません。

 var result = (from t1 in context.Table1

              select new CLASS
              {
                  ID = t1.ID,
                  NAME = t1.Name,
                  LOCATION = t1.loc,
                  COUNTRY = t1.Country,
                  CategoryArray = new List<int>(t1.Tabel2.Select(p => p.CategoryID).ToArray())

              }).Take(10).ToList();

ASP.NET C# 4.0 LINQ TO SQL

4

3 に答える 3

2

サブクエリが必要です。これを試して:

{
    ID = t1.ID,

    NAME = t1.Name,

    LOCATION = t1.loc,

    COUNTRY = t1.Country,

    CategoryArray = (from t3 in Table3
                     where t2.Value == t3.Value && t3.Ln == "en"
                     select t3.Name).ToList()
}

CLASS オブジェクト モデルで CategoryArray を次のように定義した場合は、代わりにList<int>使用する必要があります。.ToList().ToArray()

私はこれが非常に明確であるとは思いませんでした:サブクエリの Table1 と結合します。

于 2012-05-06T22:16:18.877 に答える
0

この例では、複数結合が機能するでしょうか?

私はこれらの線に沿って何かを考えました:

 var result =   from a in table1
                join b in table2 on a.id equals b.table1id
                join c in table3 on b.value equals c.table2value
                select new {Value = b.value, Name = c.Name}

結果を何によってグループ化したいのかわかりませんが、上記が機能する場合は、値または ID でグループ化して、おそらく名前のリストを取得できます。
ただし、データがなければ、これをテストするのは簡単ではありません。

編集:

投稿のクエリに満足している場合は、CategoryArray のすべての値に関連付けられたすべての名前のリストを取得するために、次のクエリを試すことができます。

var res = table3
            .Where(c => CategoryArray.Contains(c.table2value))
            .Select(c => c.Name)
            .ToList();
于 2012-05-07T08:08:57.673 に答える