Linq在group by中返回多个值,只需最后修改

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

我有以下linq,我希望在一天中修改最后一个产品,例如,在一天即将结束时,我有2000个产品(
CajasDia
),但在中午,我只有500个产品(
CajasDia
),此linq提供了当天产品修改的完整列表,我只想要修改产品的最后一条记录(只有500条)

这涉及到三个表,
Producto
(产品),
ProductoSubRegion
subsection
,a一个区域包含很多产品,一个区域包含很多产品

这是表之间的关系:
Producto
1..*
ProductoSubRegion
*..1
subsection

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不起作用一样。。。