我是LINQ的新手,需要一些查询帮助。
我需要(tblResources)中属于 匿名 的所有资源,以及 Public ResourceGroups (tblResourceGroups)。此外,我还需要属于 currentUser 所属的 ResourceGroups 的所有资源
如果 currentUser 未登录(currentUser == null),则只有属于 匿名的资源 ,并且应返回 公开 资源组。
注意:我的数据模型不包含tblResourceAccess的实体。我不确定为什么在创建模型时没有添加这个实体。
string currentUser = IdentityHelper.GetUserIdFromRequest(Context.Request);
var result = from r in DbContext.Resources
where r.Active == true // && r.ResourceGroups?????
select new
{
ResourceTypeName = r.ResourceType.Name,
Name = r.Name,
Version = r.Version,
Description = r.Description,
Path = r.Path,
Active = r.Active
};
答案 0 :(得分:0)
tblResourceAccess
被EF抽象出去,ResourceGroups
属性被添加到Resource
表中以提供功能。使用这种关系,我们可以将以下查询拼凑在一起:
from r in DBContext.Resources.ToList()
where (currentUser == null
&& ("anonymous,public").Contains(
r.ResourceGroups.Name.ToLower()))
|| (currentUser != null)
select new
{
ResourceTypeName = r.ResourceType.Name,
Name = r.Name,
Version = r.Version,
Description = r.Description,
Path = r.Path,
Active = r.Active
};
答案 1 :(得分:0)
最后,经过很多的试用和错误!我不确定这是否是实现此查询的最佳方式,但它确实有效。
感谢您的帮助 @The Sharp Ninja !
string currentUser = IdentityExtensions.GetUserId(HttpContext.Current.User.Identity);
var resources = from r in DbContext.Resources
where r.ResourceGroups.Any(
rg => rg.Name == "Anonymous" ||
rg.Name == "Public" ||
rg.ResourceUserGroups.Any(ug => ug.UserID == currentUser))
select r;