0

Access データベース テーブルからエクスポートされた 2 つの XML ファイルをクエリする LINQ TO XML クエリを作成する必要があります。元の Access DB クエリは次のようになります。

SELECT 
(
    [TableB].[Code] Is Null,[TableA].[Code],
    LCase(Left([TableA].[Code],1)) & ":" & [TableB].[code]
) AS Code, 

Trim
(
    [TableB].[Description] & " " & [TableA].[Description]
) AS Description
FROM TableA LEFT JOIN TableB 
ON TableA.Code = TableB.SubProduct;

それをLINQ to XMLに変換すると、左結合の右部分が利用できないという問題があります。私のLINQは次のようになります。

Dim results = _
        From a In TableA.Descendants("Product")
        Group Join b In TableB.Descendants("Product")
        On a.Element("Code").Value Equals b.Element("SubProduct").Value Into leftJoinGroup Group
        From p In leftJoinGroup.DefaultIfEmpty
        Select New With
        {
             I DON KNOW HOW TO WRITE IT
        }

どちらのテーブルにも「コード」という名前の列があります。Selectただし、変数 TableB は私の句内では使用できないようです。私は持っているだけaで利用可能であるため、TableB (b) からp取得できません。Codeどうすればいいですか?

4

1 に答える 1

1

私は自分でlinqを使い始めたばかりで、先週この問題に遭遇しました。これはhttp://msdn.microsoft.com/en-us/vstudio/bb688088.aspxにとって非常に役に立ちましたが、vb.net http://msdn.microsoftで左外部結合を実行する方法の例を次に示します。 com/en-us/vstudio/bb737909#lojoin .

あなたの例では、tableB は、p を使用して選択した leftJoinGroup に格納されています。tableB から値を取得するには、p から選択する必要があります。tableA と tableB の両方から列を連結しようとしているため、tableB レコードが null かどうかを確認します。

Dim results = From a In TableA.Descendants("Product") Group Join b In TableB.Descendants("Product") _
                On a.Element("Code").Value Equals b.Element("SubProduct").Value Into leftJoinGroup = Group _
                From p In leftJoinGroup.DefaultIfEmpty() _
                Select New With { _
                    .Code = If(p Is Nothing, a.Element("Code").Value, String.Format("{0}:{1}", Left(a.Element("Code").Value.ToLower(), 1), p.Element("Code").Value)), _
                    .Description = If(p Is Nothing, a.Element("Description").Value, String.Format("{0} {1}", p.Element("Description").Value, a.Element("Description").Value))}

上記のコードの例を次に示します。テストはしていません。xdocumentsではなくデータテーブルを結合するときにこのコードを使用しました。これが明確でない場合は申し訳ありませんが、これは私の最初の投稿です。

于 2013-11-08T15:20:35.500 に答える