以数组的形式检索多对多ID

时间:2016-06-24 19:56:09

标签: sql sql-server

我有三个表,FoosBars和多对多表FoosBars。每个表都有自己的自动递增INT作为主键,FoosBars有两列:FooIdFoos.Id的外键)和BarsId(外国Bars.Id的关键。在我的应用程序(C#)中,我希望使用Foo表中的列以及关联BarIds的数组/列表填充我的Foos - 对象。现在,我已经两次查询数据库:一次检索我想要的所有Foos(select * from Foos where X),然后再次检索FoosBars(select * from FoosBars inner join Foos on Foos.Id=FoosId where X),然后填充每个Foo - 我的应用程序中的对象BarIds。

然而,这要求我暂时将FoosBars对象存储在我的应用程序中,并且我需要有一个类来表示FoosBars,我想避免使用它。有没有办法将正确的FoosBars检索为数组?

我有这样的想法:

Select *, (select BarsId
  from [this Foo]
  inner join FoosBars on Foos.Id=FoosId
) as BarIds
From Foos
Where X

1 个答案:

答案 0 :(得分:1)

选择中的子查询必须返回一个值,因此提供的示例无效。此外,当您执行查询时,您应该期望结果集(即行集合),而不是数组或任何其他类型。

没有什么能阻止您以最简单的方式使用它:

select *
from [Foos]
inner join FoosBars on Foos.Id=FoosId

您可能需要考虑根据此结果集更改填充对象的方式。

每行:

  • 如果你遇到新的Foo - >创建它,否则忽略它
  • 将FoosBars项添加到现有的Foo