我試圖使用實體做到這一點:實體框架:DbIsNullExpression的參數必須是指在原始或引用類型
SELECT *
FROM aspnet_Users u LEFT JOIN (SELECT u.UserId, p.Permission, p.MediaId, p.Valid
FROM aspnet_Users u LEFT JOIN Permission p ON u.UserId = p.UserId
WHERE p.MediaId = 57 AND p.Valid = 1
) B
ON u.UserId = B.UserId
下面是C#代碼:
var up = from u in en.aspnet_Users
join p in en.Permissions
on u.UserId equals p.UserId into pu
from p2 in pu.DefaultIfEmpty()
where p2.MediaId == this.MediaId && p2.Valid == true
select new
{
u.UserId,
p2.PermissionId,
p2.Permission1,
p2.MediaId,
p2.Valid
};
var ul = from us in en.aspnet_Users
join pm in up
on us.UserId equals pm.UserId into pm1
from pm2 in pm1.DefaultIfEmpty()
orderby us.LoweredUserName
select new PermissionInfo {
Permission = (pm2 == null ? -1 : pm2.Permission1),
UserName = us.UserName,
UserId = us.UserId,
PermissionId = (pm2 == null ? -1 : pm2.PermissionId) };
ret = ul.ToList();
然而,在最後一行發現錯誤
DbIsNullExpression的參數必須引用原語或引用類型。
任何人都知道如何解決這個問題?謝謝。
編輯回答1點建議:
var up = from u in en.aspnet_Users
join p in en.Permissions
on u.UserId equals p.UserId into pu
from p2 in pu.DefaultIfEmpty()
where p2.MediaId == this.MediaId && p2.Valid == true
select new {u, p2};
var ul = from us in en.aspnet_Users
join pm in up
on us.UserId equals pm.u.UserId into pm1
from pm2 in pm1.DefaultIfEmpty()
orderby us.LoweredUserName
select new PermissionInfo
{
Permission = (pm2 == null ? -1 : pm2.p2.Permission1),
UserName = us.UserName,
UserId = us.UserId,
PermissionId = (pm2 == null ? -1 : pm2.p2.PermissionId)
};
ret = ul.ToList();
感謝您的建議。 它做的是:它有2個表,用戶和權限。對於不同媒體ID的用戶,權限具有權限值。但它沒有列出所有用戶的所有媒體ID的權限。我需要爲所有用戶提供一個列表。如果用戶處於權限中,請列出其值。如果用戶不在Permission中,則列表爲-1。這就是爲什麼它有兩個左連接。 SQL很簡單,實體查詢也很簡單。 再次感謝。 – urlreader