列表<>;.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"值分配给正在排序的对象的属性!!抱歉耽误了你的时间*
了解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,因为他们的理论解决了你的问题,而我只是简单地阐述并连接了对话要点。