我可以在一个查询中获取包含另一个对象列表的Object列表吗?

时间:2014-12-19 09:43:51

标签: c# sql sql-server

我试图了解如何在一个查询中获得所需内容,我描述了这种情况:

我的数据库中的表:

用户(ID,Name,DateJoin,)---- ID是PK

个人资料(ID,姓名,DateCreated)--- ID为PK

UserProfile (userID,profileID) - userID& profileID都是PK和FK。

*说明:每个用户都可以有多个配置文件,每个配置文件都可以分配给许多用户。

现在我的应用程序中有两个类:

APPUSER

  • ID
  • 名称
  • DateJoin
  • List<AppProfile>(个人资料列表)

AppProfile

  • ID
  • 名称
  • dateCreated会

现在我想在DB的一个查询中获取我需要的数据以便返回:

List<AppUser>,每个AppUser中的AppUser列表我有一个特定AppUser的AppProfile列表。

更新

Ben回答是我正在寻找的,但他的解决方案中存在一个问题:

它唯一拥有个人资料的返回用户没有个人资料的用户不会返回。

所以例如我有2个用户,琼斯有2个配置文件,吉姆没有我得到:

日期-表

行[0]:用户名:&#34;琼斯&#34;,个人资料名称:&#34;一个&#34;。

行[1] :用户名:&#34;琼斯&#34;,个人资料名称:&#34;两个&#34;。

没有提到Jim(另一位没有个人资料的用户。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

SQL for this非常简单,您只需加入所有表。您当然会获得与用户和配置文件组合一样多的记录,因此您必须迭代结果集并相应地填充您的类。

SELECT * 
FROM User u
LEFT OUTER JOIN UserProfile up on u.ID = up.UserId
LEFT OUTER JOIN Profile p on p.Id = up.ProfileId

这与实体框架之类的内容更为简洁。使用它你可以创建多对多的关系,EF将为你做所有繁重的工作。

更新:

根据您的评论,我已更新查询以始终返回所有用户,即使他们没有配置文件。这些用户的UserProfile和Profile字段将包含NULL。