2
我敢肯定,我可以得到我從一個單一的LINQ聲明想要的結果,我只是不能由我自己找到它!這是我到目前爲止有:的Linq:多個子加入或子查詢
var query = from uir in Aspnet_UsersInRoles
join r in Aspnet_Roles
on uir.RoleId equals r.RoleId
select new
{
UserId = uir.UserId,
RoleName = r.RoleName
};
var query2 = from q in query
group q by q.UserId into roles
select new
{
UserId = roles.Key,
Roles = roles.Distinct()
};
var query3 = from u in Aspnet_Users
join q in query2
on u.UserId equals q.UserId
select new
{
UserId = u.UserId,
UserName = u.UserName,
Roles = q.Roles
};
,這是不正確的,即使我並不真的需要有用戶ID在「角色」列表/ IEnumerable的,只是每個UserId的角色名稱列表。
我使用asp.net成員SQL表,基本上我想獲得用戶包括他們的角色的列表。
- 每個用戶可能有多個角色。
- 用戶可能根本沒有作用(應該仍然顯示在結果)
能否請你幫我或點我就如何從一個單一的LINQ的聲明相同的結果正確的方向?
PS。是的,我是Linq新手和SQL老手,可能會模糊我的想法。
編輯
好吧,我想我得到它:
var q = from u in Aspnet_Users
from up in UserProfiles.Where(_up => _up.UserId == u.UserId).DefaultIfEmpty()
from uir in Aspnet_UsersInRoles.Where(_uir => _uir.UserId == u.UserId).DefaultIfEmpty()
from r in Aspnet_Roles.Where(_r => _r.RoleId == uir.RoleId).DefaultIfEmpty()
group r.RoleName by new {
u.UserId,
u.UserName,
up.FirstName,
up.LastName,
u.LastActivityDate
} into g
select new
{
userID = g.Key.UserId,
firstName = g.Key.FirstName,
lastName = g.Key.LastName,
userName = g.Key.UserName,
lastActivityDate = g.Key.LastActivityDate,
roles = g.Distinct()
};
你覺得呢? (我從我自己的UserProfiles表中添加了信息,與Aspnet_Users的關係爲1:1)
我得到:「'userRole'這個名字不在'equals'左邊的範圍內,考慮交換'equals'兩邊的表達式。 – qbantek 2010-11-07 00:47:48
如果我換,我得到了表達:「這個名字‘用戶’是不是在範圍上的‘等於’左側考慮交換上的‘等於’兩邊的表情。」 – qbantek 2010-11-07 00:48:33
啊,是的,我的錯誤,我試圖保持它的可讀性,並改變我可能不應該有的東西。 groupby將'userRole'帶出範圍。 – 2010-11-07 00:53:15