【问题标题】:In LINQ query, how to order by included table column using .Include()?在 LINQ 查询中,如何使用 .Include() 按包含的表列排序?
【发布时间】:2013-03-27 21:49:52
【问题描述】:

我有这个表结构:

我有这个 LINQ 查询:

var query = (from p in context.People.Include("PeopleClub").Include("PeopleClub.Club")
             orderby p.Name
             select p).ToList();

是否可以这样做:

var query = (from p in context.People
                              .Include("PeopleClub")
                              .Include("PeopleClub.Club")
             orderby p.Name, p.PeopleClub.DisplaySequence
             select p).ToList();

更新:使用 Entity Framework 4.0

更新 2:我放弃了。另一种方法见this similar question。我最终在没有 .Include() 的情况下重写了我的查询。

【问题讨论】:

  • 你试过了吗?不行吗?
  • 导航属性映射了吗?
  • p.PeopleClub 有效,但我无法访问 p.PeopleClub 中的任何列。这是我尝试时的错误:“System.Data.Objects.DataClasses.EntityCollection”不包含“DisplaySequence”的定义,并且没有扩展方法“DisplaySequence”接受类型的第一个参数可以找到“System.Data.Objects.DataClasses.EntityCollection”(您是否缺少 using 指令或程序集引用?)
  • p.PeopleClub的类型是什么?它是导航属性定位链接表吗?
  • @TravisJ: orderby a, bOrderBy(a => a).ThenBy(b => b)

标签: c# linq entity-framework linq-to-entities sql-order-by


【解决方案1】:

通过导航属性试试:

using System.Data.Entity;                                  // notice using

var q = from p in context.People
                          .Include(p => p.PeopleClub)      // notice lambda instead of string
                          .Include(p => p.PeopleClub.Club) // you may not need that though
        orderby p.FirstName, p.ClubPerson.DisplaySequence
        select p;

或常规加入:

var q = from p in db.People
        join pc in db.PeopleClub on p.PersonID equals pc.PersonID
        join c in db.Clubs on pc.ClubID equals c.ClubID
        orderby p.FirstName, pc.DisplaySequence
        select p;

【讨论】:

  • .Include 需要一个字符串,所以它不会让我这样做。
  • @scw: 如果你在下面添加命名空间,编译器会找到一个接受 lambda 的扩展方法。
  • @scw:查看compilable example 和 n.p.并加入
  • 你是什么意思'在编译器下面添加命名空间会找到一个接受 lambda 的扩展方法'?
  • @scw:我说的是this extension method
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
相关资源
最近更新 更多