我试图使用linq查询过滤我引入的列表。
[HttpPost]
public ActionResult Login(int? Group, int? ListDept, int DivisionID)
{
LoginViewModel login = new LoginViewModel();
login.GroupID = Group;
login.ListDeptID = ListDept;
login.DivisionID = DivisionID;
if(Group == 17)
{
Session["Login"] = login;
return RedirectToAction("Index");
}
var roleGroupmap = new List<string>
{
{"Role1"},
{"Role2"},
{"Role3"}
};
var grouplist = new List<Group>();
foreach(var role in roleGroupmap)
{
if(User.IsInRole(role))
{
grouplist.Add(CheckLogin.CheckGroup(role));
}
}
login.Groups = grouplist;
Session["Login"] = login;
return RedirectToAction("Index", "Case");
}
public class CheckLogin
{
public static Group CheckGroup(string role)
{
Group group = new Group();
switch (role)
{
case "Role1":
group.Name = "Group1";
group.ID = 1;
break;
case "Role2":
group.Name = "Group2";
group.ID = 2;
break;
case "Role3":
group.Name = "Group3";
group.ID = 3;
break;
}
return group;
}
}
public class LoginViewModel
{
public int ID { get; set; }
public Nullable<int> GroupID { get; set; }
public Nullable<int> ListDeptID { get; set; }
public int DivisionID { get; set; }
public ICollection<Group> Groups { get; set; }
public virtual Group Group { get; set; }
public virtual ListDept ListDept { get; set; }
}
到我的索引页面,我试图过滤。
CaseListViewModel cases = new CaseListViewModel();
cases.OpenCases = db.Cases.Where(c => c.StatusID == 1 && c.AssignedTo == emailAddr || login.DivisionID == c.DivisionID);
public class CaseListViewModel
{
public IEnumerable<Case> OpenCases { get; set; }
public IEnumerable<Case> ClosedCases { get; set; }
}
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
public Nullable<bool> Active { get; set; }
public ICollection<Case> Cases { get; set; }
}
我如何添加此查询以过滤列表中的那些?任何帮助将不胜感激。
谢谢, 亚当
答案 0 :(得分:1)
你可以使用这样的东西
var groupIds = login.Groups.Select(g => g.Id).ToList();
cases.OpenCases = db.Cases.Where(c => (
c.StatusID == 1 && c.AssignedTo == emailAddr || login.DivisionID == c.DivisionID)
&& groupIds.Contains(c.GroupId));