【问题标题】:LINQ Query OrderByDescending not recognizing lambda expressionLINQ 查询 OrderByDescending 无法识别 lambda 表达式
【发布时间】:2017-06-12 02:54:36
【问题描述】:

我对 LINQ 还很陌生,但我想我已经掌握了窍门。

我正在尝试对 select 语句进行分组,然后对其进行降序排列。仅仅查看其他问题,我已经走了很远,但是当我尝试附加 OrderByDescending() 函数时,我尝试添加的 lambda 表达式无法被智能感知识别。

var test = db.UserPokemons.Where(x => x.PkmnDataId == pokemon.Id && x.StepsToHatch == 0)
                          .GroupBy(n => n.User1.Country).OrderByDescending();

因此,例如,.OrderbyDescending(x => x.User1.Country) 不包含User1 的定义。

这与我的陈述顺序有关吗?我想这是因为我在OrderBy 之前调用了GroupBy,但我不知道如何解决它。

如何订购我的团体?

哦!差点忘了 - 我只想要前 3 个国家/地区,那么有没有简单的方法来限制它?

  • 如何在同一个LINQ函数中使用GroupByOrderByDescending
  • 如何只选择前/前 3 组

感谢您的帮助!

【问题讨论】:

  • 您要订购组,还是订购组内的项目?
  • 我想订购组
  • 如果您想按国家/地区订购,请使用 .OrderbyDescending(x => x.Key).Take(3)
  • x.Key 是我需要的——我不确定当 x 被分组时它是如何获取 x 值的。现在完美运行,谢谢!

标签: c# linq group-by


【解决方案1】:

我想这就是你想要的:

 var test = db.UserPokemons.Where(x => x.PkmnDataId == pokemon.Id && x.StepsToHatch == 0).
        GroupBy(n => n.User1.Country).Select(x=>x.First()).OrderByDescending().Take(3);

【讨论】:

  • 那不太行——OrderByDescending() 需要参数,First() 也会抛出错误。我已经让它工作了 - 谢谢你的帮助!
【解决方案2】:
var countriesInOrder = db.UserPokemons.Where(x => x.PkmnDataId == pokemon.Id && x.StepsToHatch == 0).
                GroupBy(n => n.User1.Country).OrderByDescending(x => x.Key).Take(3).ToArray();

知道了 - lambda 表达式需要在分组后转到x.Key。 (感谢 jitender!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多