使用linq查询从列表中筛选
我正在尝试筛选使用linq查询拉入的列表使用linq查询从列表中筛选,linq,filter,Linq,Filter,我正在尝试筛选使用linq查询拉入的列表 [HttpPost] public ActionResult Login(int? Group, int? ListDept, int DivisionID) { LoginViewModel login = new LoginViewModel(); login.GroupID = Group; login.ListDeptID = ListDept; login.D
[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; }
}
[HttpPost]
公共操作结果登录(int?Group、int?ListDept、int DivisionID)
{
LoginViewModel login=新建LoginViewModel();
login.GroupID=Group;
login.ListDeptID=ListDept;
login.DivisionID=DivisionID;
如果(组==17)
{
会话[“登录”]=登录;
返回操作(“索引”);
}
var roleGroupmap=新列表
{
{“Role1”},
{“Role2”},
{“Role3”}
};
var grouplist=新列表();
foreach(角色组映射中的var角色)
{
if(User.IsInRole(角色))
{
添加(CheckLogin.CheckGroup(角色));
}
}
login.Groups=grouplist;
会话[“登录”]=登录;
返回重定向操作(“索引”、“案例”);
}
公共类CheckLogin
{
公共静态组检查组(字符串角色)
{
组=新组();
交换机(角色)
{
案例“角色1”:
group.Name=“Group1”;
组ID=1;
打破
案例“角色2”:
group.Name=“Group2”;
组ID=2;
打破
案例“角色3”:
group.Name=“Group3”;
组ID=3;
打破
}
返回组;
}
}
公共类LoginView模型
{
公共int ID{get;set;}
公共可为空的GroupID{get;set;}
公共可空ListDeptID{get;set;}
public int DivisionID{get;set;}
公共ICollection组{get;set;}
公共虚拟组{get;set;}
公共虚拟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; }
}
CaseListViewModel案例=新的CaseListViewModel();
cases.OpenCases=db.cases.Where(c=>c.StatusID==1&&c.AssignedTo==emailAddr | | login.DivisionID==c.DivisionID);
公共类CaseListViewModel
{
公共IEnumerable OpenCases{get;set;}
公共IEnumerable ClosedCases{get;set;}
}
公共课组
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共可空活动{get;set;}
公共ICollection案例{get;set;}
}
我将如何添加到此查询以筛选列表中的查询?任何帮助都将不胜感激
谢谢,
亚当你可以用这样的东西
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));
名单上有什么?对不起,我应该说得更具体些。我已经用上面的模型更新了代码,以显示我正在尝试做什么。谢谢你,但是你也可以把什么放在
db.Cases
-我想应该是Case
,但是是什么字段。我假设您想按登录.Groups
中的内容进行筛选,因此显示Group
类也会有所帮助。只需更新代码即可显示这些内容。再次感谢如果我理解正确,您希望只包括与登录.Groups
相关的案例(以及其他过滤器)?您的案例
类包含一个属性GroupId
?