1

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

我正在尝试根据名为“重量”的对象的属性返回 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;
    }
}

* 发现错误!我忘记将“重量”值分配给我正在排序的对象的属性!!抱歉耽误您的时间... *

4

2 回答 2

1

我遇到过这样一个案例。当我认为我想按特定字段排序但我一直想要以降序方式排序时,就会发生这种情况。如果您的项目已经按升序排序...ly,则调用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,因为他们的理论解决了您的问题,我只是详细阐述并连接了对话点。

于 2013-07-07T00:38:54.010 回答
1

这将有助于了解rd.GetAllResourceTypes().

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

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

您没有告诉我们任何有关数据来自何处的信息,因此无法确定。

于 2013-07-07T01:14:50.880 回答