0

我需要编写一个 LINQ TO XML 查询,它查询从 Access 数据库表中导出的两个 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并且p可用,所以我无法Code从 TableB (b) 中获取。我该怎么做?

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

在您的示例中,表 B 被存储到您使用 p 选择的 leftJoinGroup 中。要从 tableB 中获取值,您需要从 p 中进行选择,并且由于您尝试连接 tableA 和 tableB 中的列,因此我将检查 tableB 记录是否为空。

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 回答