*我刚发现错误!对不起大家!请参阅问题的最后解决方案,或继续阅读以发现问题*
我正在尝试返回一个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'值赋给我正在排序的对象的属性!对不起,等你的时间...... *
答案 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提供程序?
您没有告诉我们数据来自何处,因此无法确切知道。