2012-01-11 3 views
1

私は次のようなlinqを持っています。たとえば、2000年の製品(CajasDia)を持っている日の開始時など、正午私はわずか500製品(CajasDia)、このlinqは私にその日の製品の変更の完全なリストを与えている、私は変更された製品(500のみ)の最後のレコードを欲しいグループ内の複数の値を返すLinqは最後に変更する必要があります

これは3つのテーブルProducto(製品)、ProductoSubRegionおよびSubRegionは、地域に含まれる製品が多く、地域には多くの製品が含まれています。

これは、テーブル間の関係である: Producto 1 .. * ProductoSubRegion * .. 1 SubRegion

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); 

これは私が、私は1つのレコードのみ、1496年の値を取得する必要がありそうだものです製品1

My error

+0

は私が異なった値 'p.Fecha'と' p.CajasDia'を推測...

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); 

主な違いは、私がorderby使用場所ですが、私は答えを見つけることができませんでした「重複」行 –

+0

私はあなたに従っていませんが、 'p.CajasDia'のレコードは1つだけです。これは' p.Fecha'を注文して最後に変更したものを入手したいのですが... – Luis

+0

ああ、私はそれを持っています'p.Fecha'と' p.CajasDia'を 'groupby'から削除しましたが、今は最初のレコードだけを取得しています。最後のものではなく、orderbyが動作していないようです... – Luis

答えて

0

のために私は2つのlinqs、その作業にLINQを分割し、それはパフォーマンスを向上させる可能性があるので、一つだけを持って良いでしょう。..

同様の問題を抱えている人には、簡単な説明として、最初のlinqはFecha(日付の値)でRegionの注文に属する日のすべての製品を取得します。 2番目のlinqは値を製品のID、名前、価格、説明などの固有の値にグループ化します。

他人を助けることを願っています。

関連する問題