EF中的OrderByDescending不起作用

时间:2014-05-27 16:07:09

标签: c# entity-framework

大家好我有这样的模特:

public partial class Path
{
    public Path()
    {
        this.Sensors = new HashSet<Sensor>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string StartStationId { get; set; }
    public string EndStationId { get; set; }
    public int LineId { get; set; }
    public string Order { get; set; }

    public virtual Line Line { get; set; }
    public virtual ICollection<Sensor> Sensors { get; set; }
}

我尝试通过以下代码对此实体的列表进行排序:

   List<Path> lstPath = _dbcontext.Paths.Where(i=>i.LineId==lineNumber).OrderByDescending(i => i.Order).ToList();

顺便说一下,我把它改成这段代码:

List<Path> lstPath = _dbcontext.Paths.Where(i=>i.LineId==lineNumber).ToList();
       lstPath = lstPath.OrderByDescending(i => i.Order).ToList();

但它没有根据订单栏排序列表!!!为什么?

祝你好运

1 个答案:

答案 0 :(得分:2)

由于您将数字存储为字符串,因此您可能按字母顺序排序而不是数字排序,例如:

1
10
11
2
3
...

正确的做法是更改模型,以便Order是数字类型,因为:

  1. 将数字数据存储为字符串本质上是错误的设计
  2. 您将拥有一个与您的数据源实际匹配的模型
  3. 您不需要对数据进行排序(“订单”不是神秘的价值)
  4. 编辑:我删除了之前的建议,将Order属性转换为Integer lambda表达式中的OrderByDescending,但实体框架无法执行该操作针对数据库,因此需要在内存中对数据进行排序的开销。