Tôi có Mà truy vấn này, tôi muốn thay thế với LINQ như cú pháp truy vấn:SQL ROW_NUMBER() trong LINQ Query Cú pháp
select
ii.Id, ii.Name as Supplier,
qi.Price1, qi.Price2, qi.Price3,
case when qi.price1 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price1,1000000) ASC) end AS Price1Order,
case when qi.price2 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price2,1000000) ASC) end AS Price2Order,
case when qi.price3 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price3,1000000) ASC) end AS Price3Order
From dbo.InquiryItems ii
left join dbo.quoteItems qi on ii.Id = qi.QuoteItem_InquiryItem
SQL Query Result:
Id Supplier Price1 Price2 Price3 Price1Order Price2Order Price3Order
1655 Supplier 2 80.00 NULL 40.00 3 NULL 1
1656 Supplier 4 65.00 30.00 42.00 2 1 2
1662 Supplier 1 15.00 35.00 43.00 1 2 3
1670 Supplier 3 250.00 NULL NULL 4 NULL NULL
Trong C# tôi cần truy vấn này như một đối tượng IQueryable. Tôi phải lọc truy vấn cho các phần khác nhau (một hoặc nhiều) và sau đó nhóm nó theo Nhà cung cấp (IdAccount) và SUM giá. Giá này tôi phải xếp hạng.
return colQuoteItem = from vQuote in this.vQuoteItemOverviews
where vQuote.IdConstructionStageId == ConstructionStageId
group vQuote by new
{
vQuote.IdAccount
} into g
select new vQuoteItemOverviewSum
{
Id = g.Max(x => x.Id),
Price1Order = null, //Here i need the ROW_NUMBER like in the SQL-Syntax
Price2Order = null, //Here i need the ROW_NUMBER like in the SQL-Syntax
Price3Order = null, //Here i need the ROW_NUMBER like in the SQL-Syntax
price1 = g.Sum(x => x.price1),
price2 = g.Sum(x => x.price2),
price3 = g.Sum(x => x.price3),
}
;
Cảm ơn.
Bản sao có thể có của [Row \ _number over (Partition by xxx) in LINq?] (Http://stackoverflow.com/questions/9980568/row-number-over-partition-by-xxx-in- linq) – captainsac
chút phức tạp, vì bạn có 3 trường muốn có row_number. Bạn có thể thử đề xuất trong bài đăng này trước tiên: http://stackoverflow.com/questions/365086/how-to-project-a-line-number-into-linq-query-results/365127#365127 – Prisoner