【问题标题】:Order a list of entities based on a field from a separate entity with a relationship根据来自具有关系的单独实体的字段对实体列表进行排序
【发布时间】:2011-07-09 23:17:52
【问题描述】:

我使用 Entity Framework 进行对象关系映射,使用 jqGrid 进行网格。

我有一个 Employee 实体,其中包含一个 ContactID 字段。我有一个 Contact 实体,其中包含 FirstName 和 LastName 字段。

我想在网格中显示员工列表,并让用户能够按名字和姓氏排序。

这是我现在拥有的:

public JsonResult GridData(string sidx, string sord, int page, int rows)
{
    var pageIndex = Convert.ToInt32(page) - 1;
    var pageSize = rows;
    var totalRecords = GetAllEmployees().Count();
    var totalPages = (int)Math.Ceiling(totalRecords / (float)pageSize);

    IQueryable<Employee> employees = GetAllEmployees().
                                          OrderBy(sidx + " " + sord).
                                          Skip(pageIndex * pageSize).
                                          Take(pageSize).ToArray();

    ...
}

如您所见,这只使我能够按 Employee 实体中的字段排序,因此我无法按 FirstName 和 LastName 排序。

我怎样才能修改它来实现它?

【问题讨论】:

    标签: c# asp.net asp.net-mvc jqgrid


    【解决方案1】:

    如果没有其他选项,您将不得不使用包含这些字段的投影,它可能类似于:

    GetAllEmployees()
    .Select( e => new { 
                        Person = e, 
                        Contact = Contacts.Where( c=> c.Id == e.ContactID).Single() 
                      })
    .OrderBy( x => x.Contact.LastName)
    .Select( x => x.Person) //back to Employee
    .Skip(...)
    .Take(...)
    

    这不是非常有效,因为您必须为每个员工查询 Contacts 实体集(所以查询!) - 所以我建议修改初始 Linq to Entities 查询以返回您的列表员工及其关联联系人,可以通过加入来完成,即GetEmployeesWithContact()

    当您加载员工时,最好的 Linq to Entities 样式解决方案是 include 联系人:

    var emps = Employees.Include("Contact");
    

    现在emps 中的每个 Employee 都将有一个 Contact 属性,您可以在投影中使用它:

    IQueryable<Employee> employees = emps.OrderBy(x=> x.Contact.LastName)
                                         .Skip(pageIndex * pageSize).
                                         .Take(pageSize).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多