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