gpt4 book ai didi

c# - LINQ2SQL 选择订单并跳过/获取

转载 作者:行者123 更新时间:2023-11-30 22:33:40 25 4
gpt4 key购买 nike

我有从表中获取订单的功能,但不是全部。它跳过 (Page * Rows on page) 并获取 (Rows on page)。但是有很大的问题(在 Linq2SqlProfiler 中查找)。

  • 如果我打开 1 个页面(Skip = 0,Take = 50),我的执行时间为:150 毫秒。
  • 如果我打开 2 个页面(Skip = 50,Take = 50),我的执行时间为:205 毫秒。
  • ...
  • 如果我打开 10 页(Skip = 450,Take = 50)我有执行时间:1005 毫秒
  • 如果我打开 15 页(Skip = 700,Take = 50)我有执行时间:1700ms!

    public IEnumerable<Order> GetAllConfirmedOrders(DateTime firstDay, int? ProviderId = null, Guid? ManagerId = null, DateTime? date1 = null, DateTime? date2 = null, int iSkip = 0, int iTake = 50)
    {
    var predicate_order = PredicateBuilder.True<Order>();
    var predicate_orderlist = PredicateBuilder.True<OrderList>();

    if (ProviderId != null) predicate_orderlist = predicate_orderlist.And<OrderList>(ol => ol.ProviderAn == ProviderId);
    if (ManagerId != null) predicate_order = predicate_order.And<Order>(o => o.UserId == ManagerId);
    if (date1 != null && date2 != null) predicate_order = predicate_order.And<Order>(o => o.DateAdd >= date1 && o.DateAdd <= date2);
    else predicate_order = predicate_order.And<Order>(o => o.DateAdd >= firstDay);

    var orders = (from o in _dataContext.Orders
    join ol in _dataContext.OrderLists.Where(predicate_orderlist) on o.Analit equals ol.OrderAn
    where o.Status == 1
    orderby o.DateAdd descending
    select o).Where(predicate_order).Skip(iSkip).Take(iTake);

    return orders;
    }

有生成sql条件:

WHERE  [t2].[ROW_NUMBER] BETWEEN 50 /* @p2 */ + 1 AND 50 /* @p2 */ + 50 /* @p3 */
ORDER BY [t2].[ROW_NUMBER]

WHERE [t2].[ROW_NUMBER] BETWEEN 450 /* @p2 */ + 1 AND 450 /* @p2 */ + 50 /* @p3 */
ORDER BY [t2].[ROW_NUMBER]

WHERE [t2].[ROW_NUMBER] BETWEEN 700 /* @p2 */ + 1 AND 700 /* @p2 */ + 50 /* @p3 */
ORDER BY [t2].[ROW_NUMBER]

这真的很正常吗?有没有办法将执行时间节省近 100-200 毫秒?

最佳答案

查看您提供的示例执行时间后,随着您打开更多页面,时间似乎呈线性增加(150 -> 200 -> ... -> 1005 -> 1700)。因此,当您到达第 15 页时,查询必须处理更多数量的记录,以获取与第 15 页对应的数据。我猜这不是第 15 页的问题,但总体而言,查询本身正在将时间作为记录增加。您可以尝试通过调整表的索引来优化查询。

关于c# - LINQ2SQL 选择订单并跳过/获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com