我试图使用实体做到这一点:实体框架: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