【发布时间】:2014-07-31 05:10:01
【问题描述】:
今天我们目前有这样的声明:
var Query = (from dp in db.Patients
select dp);
var UserID = User.Identity.GetUserId();
if (User.IsInRole("Administrator"))
{
Query = Query.Where(x => x.AdministratorID == UserID);
}
if (User.IsInRole("Counselor"))
{
Query = Query.Where(x => x.CounselorID == UserID);
}
if (User.IsInRole("Physician"))
{
Query = Query.Where(x => x.PhysicianID == UserID);
}
问题是我们的用户可以拥有多个角色。如果用户既是顾问又是医师,我们希望系统撤回所有顾问 ID == UserID 或 PhysicianID == UserID 的患者。
如果我们不知道页面加载时用户将扮演什么角色,如何动态实现这一点?
当前的 .Where 子句仅使用 AND 语句,我们需要 OR 语句。
理想情况下会有这样的解决方案:
if (User.IsInRole("Administrator"))
{
Query = Query.Where(x => x.AdministratorID == UserID);
}
if (User.IsInRole("Counselor"))
{
Query = Query.WhereOr(x => x.CounselorID == UserID);
}
if (User.IsInRole("Physician"))
{
Query = Query.WhereOr(x => x.PhysicianID == UserID);
}
【问题讨论】:
-
您可以使用DynamicLinq 或使用Expression class 并构建您的自定义谓词
-
用户是否可以拥有
CounselorID == UserID而没有顾问角色?
标签: c# linq where-clause conditional-statements dynamic-linq