我一直在尝试使用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
}
尝试从单个表中查询按预期工作,这只是加入我遇到问题的表。
提前致谢!
答案 0 :(得分:0)
对我有用,你的equals运算符可能有问题吗? k.Klantnr和b.B_klantnr等是什么类型的?
另外,您知道这不会返回实际的枚举结果,对吧?它只返回一个迭代器,然后在需要时枚举,如果你的数据库已经被那个点关闭,那么任何事情都可能发生(希望是异常,但并非总是如此)。如果有可能,那么尝试在结果上调用ToList()以强制查询立即执行。
答案 1 :(得分:0)
你说你的第二个代码示例也没有给出结果。您的代码生成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
匹配的实际值。