簡體   English   中英

Linq Take 改變查詢結果

[英]Linq Take changing the query result

現在我正在使用

db.Products.Skip(0).Take(10).ToList();

但它改變了我的集合的結果。

例如:

//product.Name = Ball    
var product = db.Products.ToList()[5];

//product.Name = Ball    
var product = db.Products.Skip(0).ToList()[5];

//product.Name = Sleigh (it skips the "Ball" product)
var product = db.Products.Take(10).ToList()[5];

為什么會發生這種情況?

我正在使用

Skip(0)

因為我在申請的第一頁。

根據我的數據集,它應該返回“Ball”作為我集合的 5° 乘積。

如果我嘗試

db.Products.ToList().Take(10).ToList();

它工作得很好。

編輯:我很抱歉我的問題不完整,我認為沒有必要說,但我正在使用以下命令訂購我的清單:

produtosQuery = produtosQuery
                    .OrderByDescending(pro => pro.Likes.Where(like =>
                        like.UsuarioId == usuarioId &&
                        like.IsAtivo == true).Count())
                    .ThenByDescending(pro => pro.Compras.Count)
                    .ThenByDescending(pro => pro.Likes.Count(like => like.IsAtivo));

請注意,Product 不是有序列表,並且不能保證項目始終處於相同的順序。

為了確保這一點,您需要先訂購。

db.Products.OrderBy(item => item.someProperty).Take(10).ToList();

此外,您首先.ToList()是額外的。

db.Products.ToList().Take(10).ToList();
           ^^^^^^^^^  //don't need this one here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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