列表<>;.OrderBy没有';我好像没点我的单子

本文关键字:我的 gt lt OrderBy 没有 列表 | 更新日期: 2023-09-27 18:21:24

*我刚刚发现我的错误!对不起,伙计们!查看问题的末尾以获得解决方案,或继续阅读以发现问题*

我正在尝试返回列表<>基于名为"Weight"的对象属性。

我正在尝试这个:

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"值分配给正在排序的对象的属性!!抱歉耽误了你的时间*

列表<>;.OrderBy没有';我好像没点我的单子

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

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

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

你没有告诉我们任何关于数据来源的信息,所以不可能确定。

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

相关文章: