2017-04-11 53 views
0

我有一個類型爲ObjectClass的集合對象。我需要一個查詢,通過Name屬性返回對象的分組列表。對於每個分組元素,相應的Value屬性應該保存該組中所有元素的值「Value」的總和 - 否則Value應該爲獨特的單個元素保留相應的Value值。 ObjectClass類型如下所示。Linq - GroupBy和所得集合屬性的總和

public class ObjectClass 
{ 
    int Id; 
    string Name; 
    int Value; 
} 

讓VAR listList<ObjectClass>類型,它包含在它的項目的假設。

我曾嘗試:

var plas = list.GroupBy(p => p.Name).Select(g => new objectClass{ 
     Value = g.sum(p.value), 
     Name = g.select(a=>a.Name).FirstOrDefault() 
     }); 

請點我到正確的方向。

+2

這是無效的C#代碼。 –

+0

目前還不清楚什麼_「int value是groupbyobject的總和」_的意思。此外,您不能問我們您的代碼是否正常工作。我們怎麼能比你更瞭解? –

+0

我們可以評估代碼是否正確的唯一方法是向您顯示輸入和輸出 - 如果輸出不是您想要的,那麼我想您可以確定代碼是不正確的。 – PaulF

回答

-1
int i = 0; 
List<ObjectClass> foo = new List<ObjectClass>(); 

foreach(var item in foo.Where(item => item.Name = filter)) 
{ 
    i += item.Value; 
} 

舊但黃金

+0

根據我的理解,OP希望返回一個列表,其中列表中的每個條目都包含來自原始列表的名稱以及具有匹配名稱的列表中的所有條目的總和 - 即按名稱分組查詢。你的代碼只是過濾一個名稱並返回一個值的總和 - 而不是要求的。 – PaulF

+0

謝謝!最後我用它。 Linq查詢效率不高。 –

0

我覺得這是你所需要的......雖然我建議字更清晰的方式問題,並提供輸入和期望/預期的輸出。

void Main() 
{ 
    var someObjects = new List<ObjectClass>(); 

    someObjects.Add(new ObjectClass(){Name="numberWang", Value = 2}); 
    someObjects.Add(new ObjectClass(){Name="numberWang", Value = 3}); 
    someObjects.Add(new ObjectClass(){Name="numberTwang", Value = 4}); 
    someObjects.Add(new ObjectClass(){Name="numberTwang", Value = 5}); 

    //You could filter this beforehand with a Where clause ie. someObjects.Where(i=>i.Name == "whatever").Sum(i=>i.Value) 
    int sumOfValuesOfAllObjects = someObjects.Sum(i=>i.Value); 

    var sumByObjectClassName = someObjects.GroupBy(a=>a.Name).Select(b=> 
    new ObjectClass() { Name = b.First().Name, Value =b.Sum(c=>c.Value) }); 
} 

public class ObjectClass 
{ 
    public string Name; 
    public int Value; 
} 
+1

我不認爲你需要Linq中間的ToList(),將它移動到最後會將結果轉換爲List,儘管這似乎是OP想要的。 – PaulF

+0

是的,這個解決方案可以工作,但是性能呢? –

+0

@PaulF你是對的...我把它從LINQPad中的另一個片段中刪除了......現在刪除它並且+你的評論:) –