-1

トランザクション データのリストを持っています。これを ItemID フィールドでグループ化すると、基本的にトランザクションが行われた回数のデータが得られます。

  var _transactionsList = TransactionsData.GroupBy(x => x.ItemID).Select(pr => new TransactionsTabResults {
                            ItemID = pr.Key,
                            ItemPrice = pr.Select(x => x.ItemPrice).FirstOrDefault(), // the issue is here, prices are not matched for the exact product...
                            Title = pr.Select(x => x.Title).FirstOrDefault(),
                            TotalSoldItems = pr.Count(),
                            TotalRevenuePerItem = pr.Sum(y => y.ItemPrice),
                            AveragePrice = pr.Average(y => y.ItemPrice),
                            GalleryURL = pr.Select(x => x.GalleryURL).FirstOrDefault()
                        }).ToList();

ここでの問題は、この LINQ の後、製品の価格が期待どおりに正確に一致しないことです。

それらを eBay のデータと比較しましたが、価格は正確には一致していません。

どうすればこれを修正できますか?

編集:これは、マークされている質問の複製ではありません...

むしろ、アイテムを価格でグループ化すると、何が残るでしょうか? これは解決策ではありません...

編集:ここにいくつかのサンプルデータがあります

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 日間の eBay での特定の売り手の取引です... 1 つのアイテムが異なる価格で複数回販売される場合があります (取引の時点によって異なります)。

実際には一意ではない間違った値でグループ化しているため、間違った結果が得られる理由が疑わしいため、各アイテムに正しい値を割り当てることができませんか?

4

2 に答える 2

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();
于 2016-11-28T21:17:09.130 に答える
1

まず、コードに問題はないと思いますが、取得している価格は製品の価格の 1 つにすぎません。選ぶ基準(最新の価格など)があるとよいでしょう。

Title と 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 から削除して、いずれかを選択する必要があります。

コードをデバッグしたい場合は、価格を表示するために使用している行全体を返すことができます (または、グループ内のすべての行を返すことさえできます)。

(すべてのアイテムのすべての結果を返すのではなく、1 つの testID でフィルター処理できます)

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

次に、問題がデータにあるのかコードにあるのかを判断できます。

于 2016-11-28T22:37:19.127 に答える