【问题标题】:return biggest value from query从查询中返回最大值
【发布时间】:2026-02-08 12:15:01
【问题描述】:

我想找出哪个员工的订单最多:这段代码带来了所有用户的所有订单数:

    public void GetBestEmployeeFromDates(DateTime fromDate, DateTime toDate)
    {
        using (NorthwindDataContext db = new NorthwindDataContext())
        {
            var query =
                from z in db.Employees
                select new
                {
                    OrderNumber = z.Orders.Where(x => x.OrderDate > fromDate.Date).Count()
                };

        }

    }

我该怎么做?

【问题讨论】:

    标签: c# .net sql linq


    【解决方案1】:

    尝试使用MaxBy (http://code.google.com/p/morelinq/):

    var maxOrders = query.MaxBy(o => o.OrderNumbers);
    

    您还可以调整查询以包含客户名称:

    var query =
                from z in db.Employees
                select new
                {   
                    Customer = z.CustomerName,
                    OrderNumber = z.Orders.Where(x => x.OrderDate > fromDate.Date).Count()
                };
    
    var person = query.OrderByDescending(o => o.OrderNumber).Select(c=>c.Customer).First();
    
    Console.WriteLine("The customer with the most orders is: " + person);
    

    【讨论】:

    • 它很好但是,我是这样得到号码的......我想要这个名字:)
    • @darko:你指的是Max,而不是MaxBy
    • 查询不是 Linq to objects。
    • 我没有看到那个道具“MaxBy”...为什么?
    • @darko - 可能是因为你没有 morelinq 扩展。我已经更新了我的答案,只使用 order by 子句。
    【解决方案2】:

    我在想这样的事情:

    using (NorthwindDataContext db = new NorthwindDataContext())
    {
     var query =
       (from z in db.Employees
       select new
       {
          OrderNumber = z.Orders.Where(x => x.OrderDate > fromDate.Date).Count(),
          Employee = z
       }).OrderByDescending(x => OrderNumber).Select(x => x.Employee).FirstOrDefault()
    }
    

    【讨论】: