Linq在group by中返回多个值,只需最后修改
我有以下linq,我希望在一天中修改最后一个产品,例如,在一天即将结束时,我有2000个产品(Linq在group by中返回多个值,只需最后修改,linq,linq-to-entities,Linq,Linq To Entities,我有以下linq,我希望在一天中修改最后一个产品,例如,在一天即将结束时,我有2000个产品(CajasDia),但在中午,我只有500个产品(CajasDia),此linq提供了当天产品修改的完整列表,我只想要修改产品的最后一条记录(只有500条) 这涉及到三个表,Producto(产品),ProductoSubRegion和subsection,a一个区域包含很多产品,一个区域包含很多产品 这是表之间的关系: Producto1..*ProductoSubRegion*..1subsecti
CajasDia
),但在中午,我只有500个产品(CajasDia
),此linq提供了当天产品修改的完整列表,我只想要修改产品的最后一条记录(只有500条)
这涉及到三个表,Producto
(产品),ProductoSubRegion
和subsection
,a一个区域包含很多产品,一个区域包含很多产品
这是表之间的关系:
Producto
1..*ProductoSubRegion
*..1subsection
List<ProductoAgr> _productos =
(from p in db.ProductoSubRegion.Include("Producto")
orderby p.Fecha descending
where p.SubRegion.IDSubRegion.Equals(
(from c in db.Cliente
join v in db.Vendedor
on c.IDVendedor equals v.IDVendedor
where c.IDCliente.Equals(_IDCliente)
select c.Vendedor.SubRegion.IDSubRegion).FirstOrDefault()) &&
(p.Fecha >= today && p.Fecha < tomorrow)
group p by new
{
p.Producto.IDProducto,
p.Producto.Nombre,
p.Producto.Precio,
p.Producto.Descripcion,
NombreProducto = p.Producto.TipoProducto.Nombre,
p.Fecha,
p.CajasDia
} into ps
select new ProductoAgr()
{
IDProducto = ps.Key.IDProducto,
Nombre = ps.Key.Nombre,
Precio = ps.Key.Precio,
Descripcion = ps.Key.Descripcion,
NombreProducto = ps.Key.NombreProducto,
CajasDia = ps.Key.CajasDia,
Fecha = ps.Key.Fecha
}).ToList();
return View(_productos);
List\u productos=
(来源于db.ProductoSubRegion.Include(“Producto”)中的p)
费卡医嘱
其中p.subsection.IDSubRegion.Equals(
(来自客户数据库中的c)
在db.Vendedor中加入v
关于c.IDVendedor等于v.IDVendedor
其中c.IDCliente.等于(_IDCliente)
选择c.Vendedor.subsection.IDSubRegion).FirstOrDefault()&&
(p.Fecha>=今天和p.Fecha<明天)
p组由新
{
p、 Producto.IDProducto,
p、 产品名称:,
p、 Producto.Precio,
p、 产品描述,
NombreProducto=p.Producto.TipoProducto.Nombre,
p、 费查,
p、 卡贾斯迪亚
}变成ps
选择新产品OAGR()
{
IDProducto=ps.Key.IDProducto,
Nombre=ps.Key.Nombre,
Precio=ps.Key.Precio,
descripion=ps.Key.descripion,
NombreProducto=ps.Key.NombreProducto,
CajasDia=ps.Key.CajasDia,
Fecha=ps.Key.Fecha
}).ToList();
返回视图(_productos);
这就是我得到的,我应该只得到一条记录,产品的1496值1
我将linq分为两个linq,这是可行的,但最好只有一个linq,因为它可以提高性能 对于任何有类似问题的人,简短的解释是,第一个linq通过
Fecha
(日期值)获取当天属于地区的所有产品;第二个linq将值分组为唯一值,例如产品ID、名称、价格和描述
希望它能帮助别人
List<ProductoSubRegion> _subregion = (from p in db.ProductoSubRegion.Include("Producto")
where p.SubRegion.IDSubRegion.Equals(
(from c in db.Cliente
join v in db.Vendedor
on c.IDVendedor equals v.IDVendedor
where c.IDCliente.Equals(_IDCliente)
select c.Vendedor.SubRegion.IDSubRegion).FirstOrDefault())
&& (p.Fecha >= today && p.Fecha < tomorrow)
select p).OrderByDescending(y => y.Fecha).ToList();
List<ProductoAgregar> _productos = (from t in _subregion
group t by new
{
t.Producto.IDProducto,
t.Producto.Nombre,
t.Producto.Precio,
t.Producto.Descripcion,
NombreProducto = t.Producto.TipoProducto.Nombre
} into ps
select new ProductoAgregar()
{
IDProducto = ps.Key.IDProducto,
Nombre = ps.Key.Nombre,
Precio = ps.Key.Precio,
Descripcion = ps.Key.Descripcion,
NombreProducto = ps.Key.NombreProducto,
CajasDia = ps.Select(u => u.CajasDia).FirstOrDefault(),
Fecha = ps.Select(u => u.Fecha).FirstOrDefault(),
}).ToList();
return View(_productos);
List_subsection=(从db.ProductoSubRegion.Include(“Producto”)中的p开始)
其中p.subsection.IDSubRegion.Equals(
(来自客户数据库中的c)
在db.Vendedor中加入v
关于c.IDVendedor等于v.IDVendedor
其中c.IDCliente.等于(_IDCliente)
选择c.Vendedor.subsection.IDSubRegion).FirstOrDefault()
&&(p.Fecha>=今天和p.Fecha<明天)
选择p).OrderByDescending(y=>y.Fecha.ToList();
列表_productos=(从_子区域中的t开始)
t组由新
{
t、 Producto.IDProducto,
t、 产品名称:,
t、 Producto.Precio,
t、 产品描述,
NombreProducto=t.Producto.TipoProducto.Nombre
}变成ps
选择新产品OAgregar()
{
IDProducto=ps.Key.IDProducto,
Nombre=ps.Key.Nombre,
Precio=ps.Key.Precio,
descripion=ps.Key.descripion,
NombreProducto=ps.Key.NombreProducto,
CajasDia=ps.Select(u=>u.CajasDia).FirstOrDefault(),
Fecha=ps.Select(u=>u.Fecha).FirstOrDefault(),
}).ToList();
返回视图(_productos);
主要区别在于我使用的是orderby
,但我找不到答案…我猜p.Fecha
和p.CajasDia
的值在“重复”行中有所不同。我不明白,但我只想要p.CajasDia
的一条记录,我想通过对p.Fecha
进行排序并得到最后一条修改的记录来获得它…哦,我得到了它,我从groupby
中删除了p.Fecha
和p.CajasDia
,但现在我只得到了第一条记录,而不是最后一条,就像orderby不起作用一样。。。