2016-11-28 16 views
-1

와 함께 이 LINQ 이후 제품의 가격이 내가 기대하는 것과 정확히 일치하지 않는다는 것입니다.내가 거래 데이터의 목록, 트랜잭션이되었다 얼마나 많은 시간을 기본적으로 나에게 데이터를 제공하는 항목 ID 필드에 의해 I 그룹이 GROUPBY

내가 이베이의 데이터에 비교했습니다, 그리고

나는이 문제를 어떻게 해결할 수

... 가격은 오히려 주위 셔플 정확히 일치하지 아무도 어떤과 일치하지 않습니다?

편집 : 나는 그들의 가격에 의해 항목으로 그룹을한다면이, 오히려 ... 정말

표시로 질문의 중복 아닌, 내가이 남아있을 것입니까? 여기

ItemID: 282183606257 AmountPaid: 55.4 
ItemID: 282183606257 AmountPaid: 43.5 
ItemID: 282183606257 AmountPaid: 36.5 

ItemID: 1218218553606234 AmountPaid: 15.4 
ItemID: 1218218553606234 AmountPaid: 53.5 
ItemID: 1218218553606234 AmountPaid: 66.5 

ItemID: 282053079253 AmountPaid: 446.5 
ItemID: 282053079253 AmountPaid: 246.5 
ItemID: 282053079253 AmountPaid: 346.5 

는 기본적으로이 지난 30 일 이베이에서 특정 판매자에 대한 거래 일부 샘플 데이터 ... 한 품목은 매각 할 수있다 :이

편집 ... 해결책 아니다 다른 가격으로 여러 번 (거래의 순간에 따라);

실제로 고유하지 않은 잘못된 값으로 그룹화했기 때문에 내가 잘못된 결과를 얻는 이유가 의심 스럽습니다. 따라서 각 항목에 올바른 값을 할당 할 수 없습니까?

+0

@ matthensley.io 어떻게 이것이 중복되는지도 모르겠습니까? – User987

+0

어떤 아이디어가 있니? – User987

+0

동일한 ItemID에 대해 가격이 다를 수 있습니까? 그렇다면 표시 할 가격을 어떻게 결정합니까? – sgmoore

답변

1

첫째로, 나는 당신이 점점 가격을 제외한 코드와 아무 잘못이,이 하나의 제품에 대한 가격입니다 생각하지 않습니다. 그것을 선택하는 데있어 몇 가지 기준 (예 : 최신 가격)을 갖는 것이 더 낫습니다.

제목과 GalleryURL이 변경되지 않으면 groupBy에 추가 할 수 있습니다.

예를 들어 날짜 필드가있는 경우 다음 코드는 최신 가격을 찾으려고 시도합니다.

var _transactionsList = TransactionsData 
.GroupBy(x => new { x.ItemID, x.Title, x.GalleryURL }) 
.Select(pr => new TransactionsTabResults 
{ 
    ItemID    = pr.Key.ItemID, 
    Title    = pr.Key.Title, 
    GalleryURL   = pr.Key.GalleryURL, 

    ItemPrice   = pr.OrderByDescending(a=>a.Date).First().ItemPrice , 

    TotalSoldItems  = pr.Count(), 
    TotalRevenuePerItem = pr.Sum(y => y.ItemPrice), 
    AveragePrice  = pr.Average(y => y.ItemPrice), 
} 
).ToList(); 

제목이나 갤러리 중 하나를 변경할 수 있으면 groupby에서 제거하고 그 중 하나를 선택해야합니다.

당신은 당신의 코드를 디버깅 할 경우, 당신은 당신이 (그룹의 모든 라인을하거나 반환) 가격을 표시하기 위해 사용하는 라인, 예를 들어 뭔가

등의 전체를 반환 (오히려 수익에 비해 수 모든 항목에 대한 모든 결과는, 당신은 문제가 당신의 데이터 나 코드의 경우

var debug = TransactionsData 
.Where(a=>a.ItemID = testID) 
.GroupBy(x => new { x.ItemID, x.Title, x.GalleryURL }) 
.Select(pr => new 
{ 
    ItemID    = pr.Key.ItemID, 
    Title    = pr.Key.Title, 
    GalleryURL   = pr.Key.GalleryURL, 

    LatestSale   = pr.OrderByDescending(a=>a.Date).First() , 
    AllSales   = pr.ToList(), 

    ItemPrice   = pr.OrderByDescending(a=>a.Date).First().ItemPrice , 

    TotalSoldItems  = pr.Count(), 
    TotalRevenuePerItem = pr.Sum(y => y.ItemPrice), 
    AveragePrice  = pr.Average(y => y.ItemPrice), 
} 
).ToList(); 

은 그럼 당신은 결정할 수 있습니다) 하나 개의 시험 ID를 위해 그것을 필터링 할 수 있습니다.

+0

동의 할 것이지만 20 $에서 이베이 제품과 비교할 때 어떤 이유로 가격이 변동합니다 ... 예를 들어 앱에서 가격이 25 달러인데, 이베이에서 60 달러를 보여주는 동안 ... 그리고 역사를 판매하는 품목에서는 어디서나 그 가격을 볼 수 없습니까? – User987

+0

좋아, 내가 위의 모든 서면을 시도 할 것입니다 .. 어떤 이유로 나는 theres 데이터와 뭔가 잘못 생각 ... 으리라는 노력과 시간을 주셔서 감사합니다, 나는 대답을 수락했습니다 :) – User987

1

데이터를 이미 그룹화 한 후에 선택 문 안의 ".FirstOrDefault()"선택기에 문제가 있습니다. 그룹화 된 각 항목에 대해 "세미 무작위"값을 가져옵니다.

이 수정은 그룹에 대한 모든 집계 데이터와 집계 된 개별 행을 제공합니다.

var _transactionsList = TransactionsData.GroupBy(x => x.ItemID).SelectMany(pr => 
pr.Select(item => new TransactionsTabResults() 
{ 

    ItemID = pr.Key, 
    ItemPrice = item.ItemPrice, 
    ItemTitle = item.ItemTitle, 
    TotalSoldItems = pr.Count(), 
    TotalRevenuePerItem = pr.Sum(y => y.ItemPrice), 
    AveragePrice = pr.Average(y => y.ItemPrice), 
})).ToList(); 
+0

나는 당신이 의미하는 것을 얻지 만, 그게 무슨 뜻인지 실용적인예요? – User987

+0

선택 후 groupby를 수행하면 sum, average 및 stuff와 같은 함수를 사용할 수 없습니다. – User987

+0

그래, 문제는 그룹화 된 개별 항목에 집계 데이터를 포함하려고하는 것입니다. 내 게시물을 편집하여 그룹화 된 항목과 집계를 함께 제공 할 코드 스 니펫을 표시합니다. – Theo