1

ここで、LINQ 文に少し問題があります。基本的に、LINQ で 2 つのデータテーブルを結合しようとしていますが、結果に表示される列を指定したくありません。

LINQ で指定せずに結果のすべての列が必要です。または、列を動的に選択する方法はありますか?

何か案が?

コード:

Dim vDT1 As New DataTable
    vDT1.Columns.Add("Key")
    vDT1.Columns.Add("Data1")
    vDT1.Columns.Add("Data2")

    vDT1.Rows.Add({"01", "DATA1_AAAA", "DATA2_AAAA"})
    vDT1.Rows.Add({"02", "DATA1_BBBB", "DATA2_BBBB"})
    vDT1.Rows.Add({"03", "DATA1_CCCC", "DATA2_CCCC"})
    vDT1.Rows.Add({"04", "DATA1_DDDD", "DATA2_DDDD"})

    Dim vDT2 As New DataTable
    vDT2.Columns.Add("Key")
    vDT2.Columns.Add("Data3")
    vDT2.Columns.Add("Data4")

    vDT2.Rows.Add({"01", "DATA3_AAAA", "DATA4_AAAA"})
    vDT2.Rows.Add({"02", "DATA3_BBBB", "DATA4_BBBB"})
    vDT2.Rows.Add({"03", "DATA3_CCCC", "DATA4_CCCC"})
    vDT2.Rows.Add({"04", "DATA3_DDDD", "DATA4_DDDD"})

    Dim vLINQ = From DT1 In vDT1.AsEnumerable
                        Join DT2 In vDT2.AsEnumerable
                        On DT1.Field(Of String)("Key") Equals DT2.Field(Of String)("Key")
                        Select Key = DT1.Field(Of String)("Key"), Data1 = DT1.Field(Of String)("Data1"), Data2 = DT1.Field(Of String)("Data2"),
                            Data3 = DT2.Field(Of String)("Data3"), Data4 = DT2.Field(Of String)("Data4")

*** LINQ で「SELECT」をスキップしたい

結果は次のとおりです。 ここに画像の説明を入力

4

2 に答える 2

1

この要件を達成するために、LINQ 動的文インスタントを使用します。

LINQ 動的

于 2012-08-14T02:14:27.527 に答える
1

なしでlinqコンストラクトを持つことはできませんselect。linq クエリにselector句が必要です。group by

Dim vLINQ = (From DT1 In vDT1.AsEnumerable
            Join DT2 In vDT2.AsEnumerable
            On DT1.Field(Of String)("Key") Equals DT2.Field(Of String)("Key")
            Select new with
            {
               .Key = DT1.Field(Of String)("Key"), 
               .Data1 = DT1.Field(Of String)("Data1"), 
               .Data2 = DT1.Field(Of String)("Data2"),
               .Data3 = DT2.Field(Of String)("Data3"), 
               .Data4 = DT2.Field(Of String)("Data4")
            }).ToList()

現在、vLINQ は (annonymousType の) List であり、キー Data1..Data4 をプロパティとして持ち、次のように使用できます。

//sorry for C# code
foreach(var l in vLinq)
{
   console.writeline(l.Key);
   console.writeline(l.Data1);
}
于 2012-08-12T06:06:58.517 に答える