簡體   English   中英

List <>。OrderBy似乎不訂購我的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM