【问题标题】:Simple inner join in linqlinq中的简单内部连接
【发布时间】:2012-06-12 09:51:57
【问题描述】:

我有三个表ABCC 有很多 B 有很多 A

我想在树中显示所有这些数据,因此我将db.A 绑定到具有三层层次结构的嵌套控件。唯一的问题是我得到了太多行,因为它没有在 BC 之间进行内部连接。

那么我怎样才能在 linq 中做这样的事情:

SELECT A.name, B.name
FROM A
INNER JOIN B ON A.id = B.AID 
INNER JOIN C ON B.id = C.BID
GROUP BY A.Name, B.Name
ORDER BY A.Name

我尝试了以下方法无济于事:

from a in A
join b in B on a.id equals b.AID
join c in C on b.id equals c.BID
select c

非常感谢

【问题讨论】:

  • 您的 LINQ 查询在连接方面应该绝对没问题。 (当然,您还没有任何分组。)目前尚不清楚这是 LINQ to SQL 还是其他什么...这将改变诊断步骤。
  • 哦,是的,当然!我得到了查询的结果(应该在最后读取select a)然后执行result.B 并再次获得太多行。我需要进行分组,然后一切都应该没问题。感谢您的帮助,非常感谢。

标签: linq join


【解决方案1】:

试试这个:

from a in A 
join b in B on a.id equals b.AID 
join c in C on b.id equals c.BID 
group new {a,b} by new {a.name,b.name} into g
select g

上面的连接和你在sql查询中做的一样,但你想要的是:

from a in A 
join b in B on a.id equals b.AID 
join c in C on b.id equals c.BID 
group c by c.name into g
select g

【讨论】:

  • 几乎,这似乎创建了一个A 的列表,每个列表里面都有一个{B, C} 的列表。无论如何要在相应的B 中获取C 吗?谢谢
  • 我真的很喜欢如下的树结构:A 的列表,每个 A 元素包含一个 B 的列表,每个 B 元素包含一个 C 的列表。例如 result[0].B[0].C[0].name,将访问 C 中的元素。这可能吗?无论如何感谢您的回复。
  • 别担心 MegaMind,我已经找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多