I want to load data using Row_number over Partition using EF.
SELECT * FROM ( SELECT sf.SerialFlowsId ,sf.GoodsSerialId ,d.FormTypeId , d.GoodsId ,ROW_NUMBER() OVER (PARTITION BY d.GoodsId, sf.GoodsSerialId ORDER BY sf.Date DESC)row FROM sam.SerialFlows sf INNER JOIN sam.Detail d ON d.DetailId = sf.DetailId )z WHERE z.row =1 AND z.FormTypeId=7 AND z.GoodsId=51532
this request is my expectation.
I am trying to use this expression, but unfortunately the zip extension method is not recognized in ef
var goodsSerials = context.SerialFlows.OrderByDescending(x => x.Date).GroupBy(x => new { x.Detail.GoodsID, x.Date }) .Select(g => new {g}) .SelectMany(z => zgSelect(c => c)).Zip(m, (j, i) => new { GoodSerial=j,j.Detail.FormTypeID,j.Detail.GoodsID,rn=i }) .Where(x => x.rn== 1 && x.GoodsID== goodsId && x.FormTypeID==7).Select(x => x.GoodSerial).ToList();
I have over 20,000,000 entries in the SerialFlows table.
** Edited
var goodsSerials = context.SerialFlows .Where(e => e.Detail.GoodsID == goodsId ) .GroupBy(x => x.GoodsSerialID) .Select(g => g.OrderByDescending(e=>e.Date).Take(1)) .SelectMany(e => e.Where(x=>x.Detail.FormTypeID==7).Select(z=>z.GoodsSerial)).ToList();
*** Solved by this request
var goodsSerials = context.SerialFlows .Include(x => x.Detail) .Where(e => e.Detail.GoodsID == goodsId) .GroupBy(x => x.GoodsSerialID) .Select(g => g.OrderByDescending(e => e.Date).Take(1).Where(x=>x.Detail.FormTypeID==7)) .SelectMany(e => e.Select(z => z.GoodsSerial)).ToList();
sql entity-framework window-functions
Mahdi farhani
source share