【问题标题】:'System.Linq.IQueryable' does not contain a definition for 'OrderByDescending'“System.Linq.IQueryable”不包含“OrderByDescending”的定义
【发布时间】:2015-09-10 17:16:23
【问题描述】:

有人可以解释为什么该语句编译为OrderBy 而不是OrderByDescending?在我看来它应该可以工作:https://msdn.microsoft.com/en-us/library/vstudio/bb534316(v=vs.100).aspx

“System.Linq.IQueryable”不包含定义 'OrderByDescending' 并且没有扩展方法 'OrderByDescending' 接受“System.Linq.IQueryable”类型的第一个参数可能是 找到(您是否缺少 using 指令或程序集引用?)

目标框架是.Net 4.5.1
entity 的类型是System.Data.Entity.DbSet

var comparisonQuery = new ComparisonQuery();
comparisonQuery.Query = entity.Where(whereStatement)

.OrderByDescending(GenOrderByFragment()). // no go

Select(GenBigRowResultObject(elements, idFieldName)).AsNoTracking();

【问题讨论】:

  • 看起来您使用的是IQueryable 而不是IQueryable<T>
  • @LucasTrzesniewski 框架中也没有OrderBy 扩展方法IQueryable
  • GenOrderByFragment() 返回什么类型?
  • entity 非泛型DbSet 还是DbSet<T>
  • 我相信您链接到的文档适用于 IQueryable 的通用版本。非泛型版本上几乎没有扩展。

标签: c# linq iqueryable


【解决方案1】:

@d-stanley 您的原始评论让我朝着正确的方向前进。 原来OrderBy 是通过自定义扩展实现的,而不是像我立即假设的那样是框架的扩展。
感谢您的帮助。

【讨论】:

    【解决方案2】:

    正如您在上面的评论中阐述的那样,GenOrderByFragment 返回一个字符串。但是,OrderByDescending 需要 Func<Entity, string>

    例如:

    // this works
    Func<Person, string> keySelectorGood = p => "Name";
    var goodQuery = entityContext.People.Where(p => p.Name == "John").OrderByDescending(keySelectorGood);
    
    // this DOES NOT WORK
    Func<string> keySelectorBad = () => "Name";
    var badQuery = entityContext.People.Where(p => p.Name == "John").OrderByDescending(keySelectorBad);
    

    【讨论】:

    • 您的回答完全有道理,但我的问题更简单,我的假设很糟糕......谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多