저는 LINQ에 매우 익숙하며 사용하기에 처음 시도한 시도 중 하나가 복잡해야했습니다!Linq에서 Row_number (파티션 by yyy)?
나는이 Stack Over question에 수락 된 대답을 적용하려고합니다.
나는 따라서를 작성했습니다 :
using (var ctx = new MyEntities())
{
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.GroupBy(x => x.ItemID)
.Select(g => new {g, count = g.Count()})
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new {j.WebPrice, j.PriceID, j.ItemID}));
foreach (var i in q)
{
sb.AppendFormat("Id = {0}, Name = {1}, ItemId = {2}<hr/>", i.WebPrice, i.PriceID, i.ItemID);
}
}
는 기본적으로, 다른 업체에서 같은 항목에 대해 가장 저렴한 가격을 반환합니다.
그러나 프로젝트를 실행할 때 다음과 같은 매우 긴 오류 메시지가 표시되며 의미가 무엇인지 알 수 없습니다. 그러나 그것은 꽤 심각한 것처럼 보인다! 엔티티가
LINQ있어서 'System.Collections.Generic.IEnumerable
1[<>f__AnonymousType5
3 선택 System.Nullable1[System.Decimal], System.Int32,System.Int32]] Zip[tblPrice,Int32,<>f__AnonymousType5
3]을 인식하지 못한다 (System.Collections.Generic.IEnumerable1[MyProjectMVC.Models.tblPrice], System.Collections.Generic.IEnumerable
1 선택 System.Int32, 시스템 .Func3[MyProjectMVC.Models.tblPrice,System.Int32, <>f__AnonymousType5
3 [System.Nullable`1 [System.Decimal], System.Int32, System.Int32]]) ' 메서드이며이 메서드는 저장소 식으로 변환 할 수 없습니다.
도움을 주시면 감사하겠습니다.
Enumerable.Range (1, t.count)에 문제가있을 수 있습니까? LINQ to SQL –
당신의 대답은 다음과 같습니다 :'메소드는 스토어 식으로 변환 될 수 없습니다 .' Linq to SQL은 쿼리의 일부를 SQL 명령으로 변환 할 수 없습니다. 먼저 데이터베이스에서 결과를 얻어야 할 수도 있습니다 (단순한'.ToList '가 보통 트릭을합니다). –
다른 공급 업체의 가장 저렴한 가격이라면 가장 저렴한 가격을 나타내는 'WebPrice' 및'PriceID'와 함께 고유 한 'ItemID'에 대해 하나의 항목이 결과에 표시된다는 의미입니까? – Rhumborl