410*_*one 7 .net c# linq entity-framework entity-framework-6
我有这个项目,我需要做的任务之一就是找到特定对象出现在哪个页面上.该对象具有预定义的ID,ID的显示顺序从0到N,但它们可能会跳过值.
显然,这意味着使用我正在寻找的元素的ID将不起作用,就像它是25,并且每页应该有10个项目,但是其中8个项目缺失,它会尝试适合第3页,但只适合第2页.
这就是我现在所拥有的,我想知道是否有更好的方法:
int itemsPerPage = Convert.ToInt32(masterDbContext.Settings.First(x => x.Name == "ItemsPerPage").Value);
int itemCount = masterDbContext.Items.OrderBy(x => x.Id).TakeWhile(x => x.Id < currentItemId).Count();
int pageNumber = (int)Math.Ceiling((double)itemCount / itemsPerPage);
Response.Redirect("~/View/" + rootItem.Id + (pageNumber > 1 ? "/Page/" + pageNumber : ""));
Run Code Online (Sandbox Code Playgroud)
如果没有更好的方法来做到这一点,那很好.我只是希望有,因为我确信TakeWhile,当我Items在数据库中拥有数千个时,可以花一些时间.
请注意:此方法目前似乎有效.
你几乎已经拥有了。由于您是按 ID 订购商品并计算 ID 小于数字的商品数量,因此您可以在以下位置使用该条件Count:
var itemsPerPage = Convert.ToInt32(masterDbContext.Settings.First(x => x.Name == "ItemsPerPage").Value);
var itemCount = masterDbContext.Items.Count(x => x.Id < currentItemId);
Run Code Online (Sandbox Code Playgroud)
此外,LINQ 扩展方法没有直接的 SQL 匹配TakeWhile。因此,当您希望将 LINQ 查询转换为 SQL 时,最好不要使用它
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |