2017-12-07 7 views
0

私はここでいくつかの答えを見ましたが、私が欲しいものを正確に見つけることができませんでした。 私はその質問を投稿することに決めました:LINQを使用してリストにあるクラスに2つのフィールドを追加する方法は?

私はクラスAのオブジェクトを持っていて、私にはList<A>があります。

クラスの定義は、次のとおりです

public decimal Discount { get; set; } 
    public decimal Deposit { get; set; } 
    public decimal Total { get; set; } 

私は、リスト内のこれらのクラスの数を持っています。

I割引や預金の計算された合計:、私は、クラスごとに合計(預金、ディスカウント)を計算し、Totalフィールドに結果を割り当てる必要がありますので、私はTotalを取得することができます今

var DepositTotal = myList.Sum(x => x.Deposit); 
var DiscountTotal = myList.Sum(x => x.Deposit); 

後でクラスごとに

どうすればいいですか?

+1

「各クラスの合計(預金、割引)を計算する」とはどういう意味ですか?あなたが「クラス」と言うときは、代わりに*インスタンス*を意味しますか?それぞれのインスタンスに対して 'this.Total = this.Deposit + this.Discount'を設定したいということですか? 'Deposit'と' Discount'のセッターでそれを行いますか、 '' Total''''を '' public double Total => Discount + Deposit''と書き直してください。 –

+0

これは私が今やっていることです。 Thx – gene

+0

全く別のことを示唆するために私のコメントを編集しました。 –

答えて

2

コードの読者は、LINQクエリの項目を変更しようとしないため、実際にはLINQクエリの項目を変更しようとしないでください。

残念ながら、あなたは簡単そうでも選択していることを行うことができます。

list.Select(x => {x.Total = x.Discount + x.Deposit; return x;}); 

注:より良い解決策ではなく、フィールドのプロパティTotalを計算していると考えられます。あなたが現在行っている

public decimal Total => Discount + Deposit; 
+0

それは本当に不幸です。 –

+1

@EdPlunkett sort-ofは、あなたの更新されたコメントを投稿に統合しました(また、私は更新を見る前にそれを行いました:)) –

0

方法をそれは割引と預金のセッターを使用して正しいが、あなたはまた、個人のためにあなたのセッターを作る必要があります。

リストのAオブジェクトを照会の中で変更することはできませんが、元のリストの照会の出力を使用してリストを更新することができます。クラスAのコンストラクタに明確なものの、次のようなものではない: -

myList = myList.Select(a=>new A(Discount =a.Discount, Deposit=a.Deposit, Total=a.Discount+a.Deposit)).ToList(); 

それでも合計は、ディスカウントや預金からの値のみに依存している場合 - ネーミングは、あなたのクラスに、これは完全に内部作り、示すために表示される - カプセル化- 優れている。

関連する問題