2017-04-11 359 views
0

我有用C#編寫的控制檯應用程序。在我的應用程序,我有一個這樣定義的對象:C# - 按屬性值分組的對象

public class Order 
{ 
    public double Price { get; set; } 

    public string Description { get; set; } 

    public int ItemCount { get; set; } 
} 

我有一個List<Order>Order對象。我需要按價格對這些訂單進行分組。但是,這些團體代表了價格範圍。例如,我想以下組:

$0 - $10 
$10 - $20 
$20 - $30 
$30 - $40 
$40 - $50 
$50 - $60 
$60 - $70 
$70 - $80 
$80 - $90 
$90 - $100 

本來我只打算通過List<Order>循環,但它似乎笨重。我覺得對Linq來說這是一個很好的例子,但我沒有提到。我的方法不起作用。

有沒有辦法根據LINQ的Price屬性將訂單分成10美元的增量?

+0

http://stackoverflow.com/questions/13828216/group-by-range-using- linq –

+0

給這個類一個'GetGroup()'方法並按該值分組怎麼樣?如果分組邏輯可以由類定義,那就是。 – ChriPf

+0

組範圍不正確,因爲它們重疊,$ 10在0-10或10-20的地方出現,您需要創建獨佔範圍 –

回答

4

這應該工作:var groups = orders.GroupBy(order => order.Price - order.Price % 10);

+1

由於雙打如何工作的特性以及「GroupBy」做一個「.Equals」(比較組成它的組)的事實,我會小心這個答案。當處理更大的數字時,您最終可能會遇到帶有 –

+0

呃,我跑了一些測試,我無法在'0'和'Int32.MaxValue'之間的任何數字上失敗,我也嘗試過'Int64.MaxValue','Int64.MaxValue -1','Double.MaxValue'和'Double.MaxValue - 1.2'這些都沒有失敗,我認爲對於大多數合理的用途來說,這個方法很好。 –

+0

爲什麼$ 10屬於0-10而不是10- 20? –

4

使用整數運算和的GroupBy,例如:

orders.GroupBy(o => (int)o.Price/10)

+0

C#有一個'%'模運算符。 –

+4

@AsadSaeeduddin那麼?我看不出這個模運算符在這裏有用。 –

+2

沒關係,[Toto的回答](http://stackoverflow.com/a/43353494/80274)顯示了你可以如何使用它。 –