[英]List<>.OrderBy doesn't seem to order my 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;
}
}
*發現錯誤! 我忘記為正在排序的對象的屬性分配“重量”值! 很抱歉浪費您的時間... *
我碰到過一種情況。 當我認為我想按特定字段排序但我一直想要以降序排序時,就會發生這種情況。 如果您的商品已經升序排序,則調用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的理論,因為他們的理論解決了您的問題,我只是簡單地闡述和聯系了一些談話要點。
了解rd.GetAllResourceTypes()
的返回類型將有所幫助。
如果只是一個簡單的List<T>
,那么您的代碼應該可以正常工作。
但是也許這是一個IQueryable<T>
嗎? 如果是這樣,則由底層LINQ提供程序決定是否(以及如何)支持排序。 如果使用的是LINQ-to-Entities(實體框架),則應將其實現。 但是也許您正在訪問自定義LINQ提供程序?
您沒有告訴我們任何有關數據來自何處的信息,因此無法確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.