2013-02-17 3 views
2

я хочу, чтобы найти, какой работник имеет наибольшее количество заказов: этот код приносит подсчитывать все заказы от всех пользователей:вернуть наибольшее значение из запроса

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() 
       }; 

     } 

    } 

, как я должен это делать?

ответ

3

Попробуйте использовать 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); 
+0

это хорошо, но я получаю номер таким образом ... я хочу имя :) – darko

+0

@ darko: Вы имеете в виду 'Max', а не' MaxBy'. – leppie

+0

Запрос не Linq для объектов. – Magnus

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() 
}