【问题标题】:Trying to join two tables using LINQ, nothing is showing up尝试使用 LINQ 连接两个表,没有任何显示
【发布时间】:2013-12-13 01:06:53
【问题描述】:

我一直在尝试使用 ASP.NET 与数据库交互的各种方法。为此,我创建了一个包含四个表的数据库,并使用基于其身份规范的关系将它们链接在一起。

我正在尝试使以下查询起作用:

    from k in Klantens
    join b in Bestellingens on k.Klantnr equals b.B_klantnr
    join r in Bestelregels on b.Bestelnr equals r.Br_bestelnr
    join a in Artikelens on r.Br_artikelnr equals a.Artikelnr

    select new
    {
        k.Kl_anaam,
        k.Kl_vnaam,
        b.B_datum,
        b.B_status,
        a.Artikelnr,
        a.A_omsch,
        a.A_prijs,
        r.Br_aantal
    }

这样做不会返回任何记录。 我试图通过删除部件来弄清楚为什么它没有返回任何东西,但即使我这样做,它也没有返回任何记录:

    from k in Klantens
    join b in Bestellingens on k.Klantnr equals b.B_klantnr
    select new
    {
        k.Kl_anaam,
        b.B_status
    }

尝试从单个表中查询按预期工作,这只是我遇到问题的表连接。

提前致谢!

【问题讨论】:

    标签: c# asp.net sql .net linq


    【解决方案1】:

    您说您的第二个代码示例也没有给出任何结果。您的代码会生成一个INNER JOIN。试试下面的示例代码,它会给你LEFT JOIN

    from k in Klantens
    join b in Bestellingens on k.Klantnr equals b.B_klantnr into j
    from b in j.DefaultIfEmpty()
    select new
    {
        k.Kl_anaam,
        b.B_status
    }
    

    查看它为您提供了什么,以及Bestellingens.B_klantnr 中是否存在与Klantens.Klantnr 匹配的值。

    【讨论】:

    • 使用该查询返回两条记录,根据我输入的内容是正确的。但是,它似乎无法读取 b 中的内容。字段,即使我将它们换成该表中具有不同类型的其他字段。它正在正确读取 k.Kl_anaam 中的值。
    • Bestellingens.B_klantnr 字段是否包含 NULL 值?或者值与Klantens.Klantnr 不匹配?
    • 哇,我就是这样的工具。事实证明,当我在该表中填充记录的数据时,由于某种原因它实际上从未将它们插入。所以是的,它确实包含NULL 值。现在可以正常使用了,谢谢!
    【解决方案2】:

    对我有用,你的等号运算符可能有问题吗? k.Klantnr 和 b.B_klantnr 等是什么类型?

    您也知道这不会返回实际的枚举结果,对吧?它只是返回一个迭代器,然后您在需要时枚举该迭代器,如果您的数据库已经关闭,那么任何事情都可能发生(希望是一个例外,但并非总是如此)。如果这是可能的,请尝试在结果上调用 ToList() 以强制查询立即执行。

    【讨论】:

    • 每个以 'nr' 结尾的字段都是一个 int。没有下划线的也设置为标识符和键值。在环顾四周后,我发现了一个名为“LINQPad4”的程序,它允许您连接到数据库并在那里测试我的查询。我在帖子中提到的两个查询都不起作用,所以我猜它实际上可能是数据库本身的东西?
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多