C# Linq需要更改查询结果

C# Linq需要更改查询结果,c#,entity-framework,linq,C#,Entity Framework,Linq,现在我正在使用 db.Products.Skip(0).Take(10).ToList(); Skip(0) 但它改变了我的设置结果 例如: //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

现在我正在使用

db.Products.Skip(0).Take(10).ToList();
Skip(0)
但它改变了我的设置结果

例如:

//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];
这有什么原因吗

我正在使用

db.Products.Skip(0).Take(10).ToList();
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));

请注意,产品不是一个已订购的列表,也不能保证项目始终处于相同的顺序

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

db.Products.OrderBy(item => item.someProperty).Take(10).ToList();
另外,您还需要先
。ToList()
是额外的

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

请注意,产品不是一个已订购的列表,也不能保证项目始终处于相同的顺序

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

db.Products.OrderBy(item => item.someProperty).Take(10).ToList();
另外,您还需要先
。ToList()
是额外的

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

您需要添加一个订单,以获得您想要的方式
var product=db.Products.OrderBy(pro=>pro.Name).Take(10.ToList()类中具有某些属性的内容。当前您没有指定顺序-如果这是一个数据库表,则可能意味着顺序是任意的。“前十项”是不确定的。尝试在所有情况下指定适当的顺序,我怀疑问题会消失。您使用的是什么类型的数据库?有些数据库(如SQL Server)是多线程的,返回数据的顺序与存储的顺序不同。顺序是随机的。您需要使用OrderBy来保证结果的顺序。添加一个中间变量,该变量引用从LINQ语句返回的IEnumerable。然后对该变量调用
ToList
。如果在调试器中单步执行代码,则该中间层将包含一个属性,该属性保存已执行的SQL(在调用ToList后中断)。SQL语句可能会告诉您更多信息。您将按此顺序返回索引10、5、5、15。您需要添加一个顺序,以获得所需的顺序
var product=db.Products.OrderBy(pro=>pro.Name).Take(10.ToList()类中具有某些属性的内容。当前您没有指定顺序-如果这是一个数据库表,则可能意味着顺序是任意的。“前十项”是不确定的。尝试在所有情况下指定适当的顺序,我怀疑问题会消失。您使用的是什么类型的数据库?有些数据库(如SQL Server)是多线程的,返回数据的顺序与存储的顺序不同。顺序是随机的。您需要使用OrderBy来保证结果的顺序。添加一个中间变量,该变量引用从LINQ语句返回的IEnumerable。然后对该变量调用
ToList
。如果在调试器中单步执行代码,则该中间层将包含一个属性,该属性保存已执行的SQL(在调用ToList后中断)。SQL语句可能会告诉您更多信息。您将按以下顺序返回索引10、5、5、15