将不同模型的多个LINQ结果排序为MVC中的一个列表

时间:2017-01-14 12:20:59

标签: c# asp.net-mvc linq model-view-controller

我正在尝试对学生,同事或访客的用户列表进行排序,并根据他们的姓名在我的视图中对其进行排序。

以下是代码:

public ActionResult Index()
        {
            var db = new PraktikumDataContext();
            var model = new List<AdminUserListItem>();
            var studs = (from stud in db.Students select new AdminUserListItem() {Name = stud.FH_Angehörige.Name, LastLogin = stud.FH_Angehörige.FE_Nutzer.Letzter_Login, Rolle = "Student"}).OrderBy(stud => stud.Name);
            model.AddRange(studs);
            var mits = (from mit in db.Mitarbeiters select new AdminUserListItem() {Name = mit.FH_Angehörige.Name, LastLogin = mit.FH_Angehörige.FE_Nutzer.Letzter_Login, Rolle = "Mitarbeiter"}).OrderBy(stud => stud.Name);
            model.AddRange(mits);
            var gasts = (from gast in db.Gasts select new AdminUserListItem() {Name = gast.Name, LastLogin = gast.FE_Nutzer.Letzter_Login, Rolle = "Gast"}).OrderBy(stud => stud.Name);
            model.AddRange(gasts);

            model = model.OrderByDescending()
            return View(model);
        }

我已经使用OrderBy对其中的每个模型进行了排序,但由于我有3个模型,我现在有点困惑如何以某种方式将它们视为一个列表然后对它们进行排序并在我的网站上显示它们。

1 个答案:

答案 0 :(得分:0)

考虑使用对服务器进行单次调用的LINQ联合:

public ActionResult Index()
        {
            var db = new PraktikumDataContext();

            var model = 
                 (from stud in db.Students
                  select new AdminUserListItem()
                  {
                    Name = stud.FH_Angehörige.Name, 
                    LastLogin = stud.FH_Angehörige.FE_Nutzer.Letzter_Login, 
                    Rolle = "Student"}
                  ).Union(
                  from mit in db.Mitarbeiters
                  select new AdminUserListItem()
                  {
                    Name = mit.FH_Angehörige.Name, 
                    LastLogin = mit.FH_Angehörige.FE_Nutzer.Letzter_Login, 
                    Rolle = "Mitarbeiter"}
                  ).Union(
                  from gast in db.Gasts
                  select new AdminUserListItem()
                  {
                    Name = gast.FH_Angehörige.Name, 
                    LastLogin = gast.FE_Nutzer.Letzter_Login, 
                    Rolle = "Gast"}
                  )
                  .OrderByDescending(a => a.Name)
                  .ToList();

            return View(model);
        }