4

合計値の上位 5 つを表す文字列のリストを作成する必要があります。

さまざまなサービスに関連する何百もの請求書を含むデータベースがあります

元。電気 $600 2013 年 1 月 水 $50 2013 年 1 月

ここで行ったのと同じサービスをすべて合計する必要があります

public List<Double> GetSumOfSingleServices
    {
        get
        {

            var sums = (from dc in GetDashboardData                            
                        group dc by dc.serviceType into g
                        select g.Sum(sc => sc.serviceCost)).ToList();

            return sums;
        }
        set
        {
            NotifyPropertyChanged("GetSumOfSingleServices");
        }

    }

以下のコードで文字列のリストを作成しました

public List<String> GetServiceNames
    {
        get
        {

            var names = (from dc in GetDashboardData
                         group dc by dc.serviceType into g                             
                         select g.First().serviceType).ToList();

            return names;
        }
        set
        {
            NotifyPropertyChanged("GetServiceNames");
        }
    }

これで、これら 2 つのリストのデータは並列になり、GetSumOfSingleServices[0] が GetServiceNames[0] の値などになります。

最初に GetSumOfSingleServices からの最高値でランク付けされた文字列を含むリストが必要です。

したがって、最高の GetSumOfSingleServices[3] とそれに対応する文字列が GetServiceNames[3] である場合、GetServiceNames[3] をリストの最初のエントリにしたいと思います。

文字列のリストを double 値でソートする方法がわかりません。

それか

4

3 に答える 3

6

次のようなソースを使用すると、すべての変換が簡単になります。

var compositeList = GetDashboardData
     .GroupBy(dc => dc.serviceType)
     .Select(g => new{
                    name = g.Key, 
                    sum = g.Sum(sc => sc.serviceCost)})
     .ToList();

(上記の匿名オブジェクト宣言の代わりに、2 つのプロパティを持つ具象クラスを作成することを検討してくださいname) 。sum

今:

compositeList.OrderByDescending(x => x.sum).Select(x => x.name);

等々。

同期リストは最悪です。

于 2013-07-11T16:49:05.560 に答える
3

一般的な問題については、Perl で使用される一般的なスキーマであるSchwartzian transformを使用します。基礎となるメソッドを .netに移植するのは簡単なはずです

データアクセスを完全に制御できるため、ケースはさらに簡単になります。

var tuples = from dc in GetDashboardData
            group dc by dc.serviceType into g
            select new{
                Cost = g.Sum(sc=>sc.serviceCost),
                Type = g.Key,
            };
var sorted = tuples.OrderByDescending(t=>t.Cost).Select(t=>t.Type);
return sorted.ToList();
于 2013-07-11T16:47:14.673 に答える