列表<> .OrderBy似乎没有订购我的列表

时间:2013-07-07 00:11:31

标签: c# list

*我刚发现错误!对不起大家!请参阅问题的最后解决方案,或继续阅读以发现问题*

我正在尝试返回一个List<>基于称为“权重”的对象的属性。

我正在尝试这个:

public List<ReferenceTypeDto> GetAllResourceTypes()
{
    var unordered = rd.GetAllResourceTypes();
    var ordered = unordered.OrderBy(t => t.Weight).ToList();
    return ordered;

}

但顺序似乎没有改变。我做错了什么?

我调用的方法定义如下:

public List<ReferenceTypeDto> GetAllResourceTypes()
{
    var types = (from c in _context.resource_type
                 select new ReferenceTypeDto
                     {
                         Description = c.Description,
                         Id = c.Id
                     }).ToList();
    return types;
}

ReferenceTypeDto的定义如下:

public class ReferenceTypeDto
{
    public int Id { get; set; }
    public string Description { get; set; }
    public int Weight { get; set; }

    public override string ToString()
    {
        return Description;
    }
}

*发现错误!我忘了将'Weight'值赋给我正在排序的对象的属性!对不起,等你的时间...... *

2 个答案:

答案 0 :(得分:1)

我遇到过一例发生这种情况的案例。当我想要按特定字段排序时会发生这种情况,但我一直想要的是以降序排序。如果您的商品已按升序排序,则调用OrderBy不会更改订单。

由于您有一个名为Weight的字段,我只能假设您希望更高的权重位于列表的顶部。这是降序排序的理想选择。

给这段代码一个镜头,看看这是不是你想要的:

public List<ReferenceTypeDto> GetAllResourceTypes()
{
    var unordered = rd.GetAllResourceTypes();
    var ordered = unordered.OrderByDescending(t => t.Weight).ToList();
    return ordered;
}

如果这不起作用,那么我相信我理解为什么swapneel建议他们的代码。正如Matt Johnson所讨论的那样,您可能正在使用不正确地实现OrderBy的基础查询提供程序。在两个人指出可能是这种情况的基础上,我建议进行以下额外测试:

public List<ReferenceTypeDto> GetAllResourceTypes()
{
    var unordered = rd.GetAllResourceTypes().ToList();
    var ordered = unordered.OrderByDescending(t => t.Weight).ToList();
    return ordered;
}

如果第二个例子有效,那么请放弃swapneel或Matt Johnson,因为他们的理论解决了你的问题,我只是详细阐述并连接了会话点。

答案 1 :(得分:1)

了解rd.GetAllResourceTypes()的返回类型会有所帮助。

如果它只是一个简单的List<T>,那么您的代码应该正常工作。

但也许是IQueryable<T>?如果是这样,由底层LINQ提供程序决定它是否(以及如何)支持排序。如果您正在使用LINQ到实体(实体框架),那么应该实现它。但也许您正在访问自定义LINQ提供程序?

您没有告诉我们数据来自何处,因此无法确切知道。