【问题标题】:Linq query only returning 1 rowLinq 查询仅返回 1 行
【发布时间】:2011-05-23 12:35:28
【问题描述】:
Dim ds = From a In db.Model
           Join b In db.1 On a.id Equals b.ID
           Join c In db.2 On a.id Equals c.ID
           Join d In db.3 On a.id Equals d.ID
           Join f In db.4 On a.id Equals f.ID
   Select a.id, a.Ref, a.Type, a.etc

以上是我的 linq 查询。目前,当当前有 60 行时,我只从返回的数据库中获取第一行。请你告诉我哪里出错以及如何选择所有记录。

提前致谢!

更新:

当我像这样取出所有连接时:

 Dim ds = From a In db.1, b In db.2, c In db.3, d In db.4, f In db.5
Select a.id, a.Ref, a.type, b.etc, c.etc, d.etc

我得到一个 system.outofmemory 异常!

【问题讨论】:

  • 你是如何使用查询结果的?
  • 我绑定到一个gridview,然后导出到xls
  • 如果你运行相应的 SQL(包含所有的连接),你会得到所有 60 行吗?
  • 那么,您有 60 个“a”行,每个行至少由“b”、“c”、“d”和“f”中的一行引用?
  • Akram,我有 60 行。根据用户的选择,它们可能有也可能没有 b、c、d、f 行

标签: linq select join


【解决方案1】:

只有当 所有 的连接都匹配时,您才会得到一行 - 换句话说,当来自 Model 的一行带有一个 AP、一个选项、一个谈话和一个发票。我的猜测是只有其中一个。

LINQ 默认进行内部连接。如果您正在寻找左外连接(即特定行可能没有 Invoice 或 Talk 等),那么您需要使用组连接,通常与 DefaultIfEmpty 结合使用。

我对 VB 语法不是特别感兴趣,但 this article 看起来正是您所追求的。

【讨论】:

  • 这听起来像我要找的!
  • 感谢 jon 引导我找到解决方案:0)
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
相关资源
最近更新 更多