Использование функции LINQ MIN() с объединением

#c# #linq

#c# #linq

Вопрос:

Я пытаюсь получить первый заказ, который был размещен каждым клиентом, на основе метки времени.

Ниже приведен некоторый псевдокод, который не компилируется :

 var minOrders = (from Orders in DataSet.Orders select Orders.OrderTimestamp).Min()
                 join Customers in DataSet.Customers on Orders.CustomerId equals Customers.CustomerId
                 select new
                 {
                    Customers.Name,
                    Orders.OrderAmount
                 });
  

Любые указатели на правильную структуру LINQ были бы полезны, спасибо.

Джо

Комментарии:

1. Вы пытаетесь получить это для одного конкретного клиента или для первого заказа для каждого клиента?

2. Привет, Джон, для каждого. Я отредактировал.

Ответ №1:

Основываясь на написанном вами коде, я полагаю, вам нужен первый порядок каждого костюма

Тогда ваше утверждение будет

 var minOrders = from customer in DataSet.Customers
                let order = (from o in DataSet.Orders
                             where o.CustomerId == customer.CustomerId
                             order by o.OrderTimestamp
                             select o).first()
                select new
                 {
                    customer.Name,
                    order.OrderAmount
                 });
  

Комментарии:

1. Спасибо за это, Фредерик — я надеялся использовать MIN() для немного более элегантного решения, хотя я буду использовать ваш ответ в качестве основы — Спасибо

2. @Joe. Net Рад помочь, я думаю, что с MIN это усложняется. Вы также можете изучить методы sql в пространстве имен System.Data.Linq.SqlClient (возможно, потребуется добавить dll)

3. Спасибо, из интереса, почему MIN должен быть более сложным?

4. @Joe. Net ну, я не нашел хорошего решения с помощью min, если вы найдете его, вы всегда можете сказать мне 🙂