EF-запрос, включающий дополнительный столбец с агрегированными данными - PullRequest
1 голос
/ 05 января 2012

У меня есть таблица OrderDetail, подобная этой:

ID OrderNumber LineItem Qty
---------------------------
1  10000         1       2
2  10000         2       5
3  10000         3       1
4  10001         1       10

Я хотел бы вернуть эту таблицу с дополнительным столбцом, содержащим максимальное количество для каждого ордера (сгруппированное по OrderNumber), например так:

ID OrderNumber LineItem Qty  MaxQty
-----------------------------------
1  10000         1       2     5
2  10000         2       5     5
3  10000         3       1     5
4  10001         1       10    10

Я боролся с тем, как собрать синтаксис EF, чтобы это произошло.Я предполагаю, что результатом будет какой-то анонимный тип с записью OrderDetail в качестве первого свойства и количеством в качестве второго свойства, например select new { OrderDetail = ??, MaxQty = ?? }.

Спасибо, Роджер Мартин

1 Ответ

2 голосов
/ 05 января 2012

Вы можете получить MaxQty с подзапросом.Использование EF DBContext API:

public class MyContext : DbContext
{
    public DbSet<OrderDetail> OrderDetails { get; set; }
}

var context = new MyContext();
var result = context.OrderDetails.Select(od =>
    new { 
          OrderDetail = od, 
          MaxQty = context.OrderDetails
             .Where(o => o.OrderNumber == od.OrderNumber).Max(a => a.Qty) });

Будет сгенерирован следующий запрос SQL:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[OrderNumber] AS [OrderNumber], 
[Extent1].[LineItem] AS [LineItem], 
[Extent1].[Qty] AS [Qty], 
(SELECT 
    MAX([Extent2].[Qty]) AS [A1]
    FROM [dbo].[OrderDetails] AS [Extent2]
    WHERE [Extent2].[OrderNumber] = [Extent1].[OrderNumber]) AS [C1]
FROM [dbo].[OrderDetails] AS [Extent1]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...