使用linq查询从列表中过滤

时间:2015-11-13 18:21:46

标签: linq filter

我试图使用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; }

}

我如何添加此查询以过滤列表中的那些?任何帮助将不胜感激。

谢谢, 亚当

1 个答案:

答案 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));
相关问题