[英]EF Complex Query Join
下面显示的查询非常简单,它将简单地为指定客户拉出任务。 我现在想做的是获取传递给此函数的UserId并验证用户是否有权查看该任务。
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId)
.OrderBy(a => a.CreatedDateTime).ToListAsync();
在Tasks表中有一个OrganizationId属性。 用户可以通过UserOrganizations表属于n + 1个组织。 获取已知UserId
并验证Task.OrganizationId是用户之一的最佳方法是什么?
如果关系不是Tasks
类的属性,则可以用查询语法编写联接。 遵循以下原则:
var dbData = await (from t in db.Tasks
join uo in UserOrganizations on t.OrganizationId equals uo.OrganizationId
join u in Users on uo.UserId equals u.UserId
where t.CustomerId == customerId && u.UserId == theUserId
order by t.CreatedDateTime
select t).ToListAsync();
根据生成数据类的方式,您可能已经在Tasks
类上具有导航属性,从而可以执行以下操作:
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId && a.Organization.UserOrganizations.Any(uo => uo.UserId == theUserId)
.OrderBy(a => a.CreatedDateTime).ToListAsync();
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId
&& a.Organization.Users
.Any(u=>u.UserId == customerId)))
.OrderBy(a => a.CreatedDateTime).ToListAsync();
假定已设置外键,并且可以在实体之间导航关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.