首先,我使用具有以下结构的实体框架建模数据库:
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”的值。
您可以通过此查询帮助我吗?
答案 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);