【问题标题】:OrderByDescending not working in my LINQ queryOrderByDescending 在我的 LINQ 查询中不起作用
【发布时间】:2019-03-22 01:56:17
【问题描述】:

我遇到了一个查询问题,我试图按降序对结果进行排序,但它没有这样做。我在stackoverflow上看过几篇类似问题的帖子,但似乎没有一个解决方案有效。我想知道是否有人可以指出我的代码有什么问题。以下是与问题相关的部分查询:

from followup in ctx.FollowUps
    .Where(f => f.DestEntityId == user.Id 
           && f.DestEntityType == (int)ContactEntityTypeEnum.User)
    .OrderByDescending(x => x.AddDate)
select new
{ 
    user = new { Firstname = user.Firstname },
    followup = new { followup.NextFollowUpDate }
});

我也尝试在 .OrderByDescending() 之前添加 .ToList() ,但这也没有解决问题。

【问题讨论】:

  • 有两种不同的方式来形成 linq。我建议您删除“从后续行动中”。此外,在运行选择之前验证 orderbydescending 是否有效。
  • 你在AddDate字段上排序,但你selectNextFollowUpDate为什么要使用匿名对象来承载一个字段?
  • @D-Shih 好吧,我需要按添加日期订购,但显示跟进日期..那里没有问题。
  • 它怎么不工作?您也可以在 select 中添加 AddDate

标签: c# sql entity-framework linq


【解决方案1】:

从@SILENT 和@D.Shih 跟踪cmets,您的Linq 表达式看起来有点奇怪。

var followUps =  ctx.FollowUps
    .Where(f => f.DestEntityId == user.Id 
           && f.DestEntityType == (int)ContactEntityTypeEnum.User)
    .OrderByDescending(x => x.AddDate)
    .Select(x => new
    { 
        UserFirstname = user.Firstname,
        AddDate = x.AddDate,
        FollowupDate = x.NextFollowUpDate
    }).ToList();

这将按 AddDate 而不是 NextFollowUpDate 对结果进行排序,因此我将 AddDate 添加到输出中只是为了避免两者之间的混淆,因为我不知道您如何评估它们不按顺序排列基于仅看到 NextFollowUpDate。我不建议将 LinQL (from/where/select) 与 Fluent 方法混合使用。 (上)

以单独的匿名类型返回每个单独的属性似乎没有意义,只需将其扁平化为单个包,因为匿名类型旨在用于短暂的生命和即时消费。

【讨论】:

  • 您应用了这些更改后仍然有问题吗?另一种可能性是 AddDate 上的数据类型。它是 DateTime 还是类似本地化字符串的东西?答案的适用性完全取决于问题中细节的质量和相关性。
  • 是的,我只是将整个查询重写为方法语法,现在似乎工作正常,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多