Linq Take 改变查询结果

Ema*_*shi 1 c# linq entity-framework

现在我正在使用

db.Products.Skip(0).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

但它改变了我的集合的结果。

例如:

//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];
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?

我正在使用

Skip(0)
Run Code Online (Sandbox Code Playgroud)

因为我在申请的第一页。

根据我的数据集,它应该返回“Ball”作为我集合的 5° 乘积。

如果我尝试

db.Products.ToList().Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

编辑:我很抱歉我的问题不完整,我认为没有必要说,但我正在使用以下命令订购我的清单:

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));
Run Code Online (Sandbox Code Playgroud)

Ash*_*ani 5

请注意,Product 不是有序列表,并且不能保证项目始终处于相同的顺序。

为了确保这一点,您需要先订购。

db.Products.OrderBy(item => item.someProperty).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

另外你先是.ToList()额外的。

db.Products.ToList().Take(10).ToList();
           ^^^^^^^^^  //don't need this one here
Run Code Online (Sandbox Code Playgroud)