Linq to sql, агрегатные столбцы, группировка по дате в просмотр списка - PullRequest
1 голос
/ 03 августа 2011

Хорошо, у меня есть элемент управления списком с 3 столбцами:

Год |NetTotal |GrossTotal

также у меня есть таблица с названием «Заказы» с несколькими столбцами, они содержат информацию о заказе и хранят идентификатор клиента, которому они принадлежат.

Вопрос: как я могу запросить эту таблицу?с (предпочтительно) linq (текст данных от LinqToSql), чтобы вернуть следующие данные?

Я хочу найти любую запись с соответствующим CustomerID, которая имела место, сгруппировать их по году, суммировать итоговые значения соответственно и добавитьих к списку просмотра?

Теперь я могу использовать лямда-выражения и агрегаты, просто не понятно, как (опция выводит, db - объект datacontext, CustomerID - переменная int32):

Dim Orders = (From order In db.Orders Where order.CustomerID = CustomerID).GroupBy(Function(p) p.Date.Year).GetEnumerator

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

Dim tmpYears = From prevs In db.Orders Select New With {.CustID = prevs.CustomerID, .Year = prevs.PaymentDate.Year, .NetPurchase, .GrossPurchase}

Но как мне объединить столбец Закуплено в группу?

Dim CustomerOrders = From ord In db.Orders Where Ord.CustomerID = custID Select ord
Dim tot = From O in CustomerOrders Select Aggregate netTot In O Into Sum(netTot.Price * netTot.Quantity * 1+ (netTot.Discount/100))

Я хочуобъединить их.

Есть предложения?(Я прочитал this , но я хочу его в Linq, потому что это командный проект, и мы договорились использовать Linq вместо отправки .ExecuteQuerys и т. Д. В db. Также это решение LinqToSQL, так что было бы лучше, еслия мог бы использовать это)

1 Ответ

1 голос
/ 03 августа 2011

Я не могу гарантировать, что точно понимаю ваши требования, но вкратце, кажется, что вы хотите отобразить заказы, сгруппированные по годам, с агрегированными суммами по чистой / валовой стоимости, где заказы соответствуют предоставленному CustomerID?

Извините, если синтаксис немного отсутствует, но я делаю это от руки ...

Dim results = db.Orders.Where(Function(n) n.CustomerId = customerId).GroupBy(Function(n) n.Date.Year, Function(key, values) New With {.Year = key, .NetTotal = values.Sum(Function(n) n.NetPurchase * n.Quantity * (1 + (n.Discount/100))), .GrossTotal = values.Sum(Function(n) n.GrossPurchase)})

Это должно предоставить вам анонимный тип с Year, NetTotal и GrossTotalзаполнены в соответствии с требованиями, которые я перечислил.

РЕДАКТИРОВАТЬ: Также извинения за один вкладыш, но я уверен, что вы можете переформатировать его по вкусу.

...