我试图了解如何在一个查询中获得所需内容,我描述了这种情况:
我的数据库中的表:
用户(ID,Name,DateJoin,)---- ID是PK
个人资料(ID,姓名,DateCreated)--- ID为PK
UserProfile (userID,profileID) - userID& profileID都是PK和FK。
*说明:每个用户都可以有多个配置文件,每个配置文件都可以分配给许多用户。
现在我的应用程序中有两个类:
APPUSER :
List<AppProfile>
(个人资料列表)AppProfile :
现在我想在DB的一个查询中获取我需要的数据以便返回:
List<AppUser>
,每个AppUser中的AppUser列表我有一个特定AppUser的AppProfile列表。
更新
Ben回答是我正在寻找的,但他的解决方案中存在一个问题:
它唯一拥有个人资料的返回用户没有个人资料的用户不会返回。
所以例如我有2个用户,琼斯有2个配置文件,吉姆没有我得到:
日期-表
行[0]:用户名:&#34;琼斯&#34;,个人资料名称:&#34;一个&#34;。
行[1] :用户名:&#34;琼斯&#34;,个人资料名称:&#34;两个&#34;。
没有提到Jim(另一位没有个人资料的用户。
有什么方法可以解决这个问题吗?
答案 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。