C#Entity Framework - 如何返回具有Max值的列表?

时间:2014-05-23 10:04:16

标签: c# entity-framework

首先,我使用具有以下结构的实体框架建模数据库:

Pedidos :
--------
IDPedidoDetalhe (int, not null)
IDPedido  (int, not null)
Aditamento (int, not null)
Semana  (int, null)
Ano  (int, null)
Titulo  (nvarchar(250), null)

我正在尝试创建一个查询,找到需要“IDPedido”的表格行和“Aditamento”的最大值。要查找所需项目(npedido)的最大值,我使用:

List<Pedidos> lista = db.Pedidos.Where(m => m.IDPedido == npedido).ToList();
var pedido = lista.Select(m => m.Aditamento).Max(x => x);

但是我想要列表中的行(所有列)而不仅仅是“Aditamento”的值。

您可以通过此查询帮助我吗?

2 个答案:

答案 0 :(得分:1)

当您使用Select(m => m.Aditamento)投影到Aditamento时,您正在丢失Pedido实体的所有字段。要获得id的单人Pedido,使用最高Aditamento值,您只需按Aditamento订购过滤的Pedidos并选择第一个:

var pedido = db.Pedidos.Where(p => p.IDPedido == npedido)
               .OrderByDescending(p => p.Aditamento)
               .FirstOrDefault();

要获得所有具有最大Aditamento值的Pedidos,您需要按照Aditamento对过滤后的Pedidos进行分组,并选择具有最大键值的组:

var pedidos = db.Pedidos.Where(p => p.IDPedido == npedido)
                .GroupBy(p => p.Aditamento)
                .OrderByDescending(g => g.Key)
                .FirstOrDefault();

如果你想要列表,那么检查你是否找到了id的任何pedidos并将group转换为list:

if (pedidos != null)
{
    List<Pedido> result = pedidos.ToList();
}

答案 1 :(得分:0)

这应该做:

List<Pedidos> lista = db.Pedidos.Where(m => m.IDPedido == npedido).ToList();

var maxValue= lista.Max(x => x.Aditamento);

// IEnumerable with all lines that have the "maxValue"
var lineWithMaxValue = lista.Where(x => x.Aditamento == maxValue);