![](/img/trans.png)
[英]I need to save multiple items in a List<> in a .txt file, how can I do that? I don't have any code to show atm :')
[英]How do i sum a list of items by code(or any field)?
我有一個對象,其中包含另一個對象的列表。 即Object1包含List<Object2>
。
假設這是對象2的定義:
public class Object2
{
string code,
string name,
decimal amount
}
我希望能夠從列表中創建一個list2,其值將包含類似於select name, code, sum(amount) group by code
有點類似於給我的select name, code, sum(amount) group by code
這就是我所做的,但它並沒有包含我需要通過的東西。
var newlist = obj2List.GroupBy(x => x.code)
.Select(g => new { Amount = g.Sum(x => x.amount) });
我想在新列表中的代碼和名稱就像上面的sql語句一樣。
你快到了:
var newlist = obj2List.GroupBy(x => x.code)
.Select(g => new
{
Code = g.First().code,
Name = g.First().name,
Amount = g.Sum(x => x.amount)
});
這會按code
對項目進行分組,並為每個組創建一個匿名對象,並獲取該組第一項的代碼和名稱。 (我假設所有具有相同代碼的項目也具有相同的名稱。)
如果按代碼而不是按名稱分組,則必須從列表中選擇一些名稱,例如使用First()或Last()或其他名稱。
var newlist = obj2List.GroupBy(x => x.code).Select(g => new {
Code = g.Key,
Name = g.First().name,
Amount = g.Sum(x => x.amount)
});
var query = Object1.Obj2List
.GroupBy(obj2 => obj2.code)
.Select(g => new {
Names = string.Join(",", g.Select(obj2.name)),
Code = g.Key,
Amount = g.Sum(obj2 => obj2.Amount)
});
由於您只按代碼分組,因此您還需要以某種方式聚合名稱。 我已經使用string.Join
為每個代碼組創建一個類似於"Name1,Name2,Name3"
string.Join
"Name1,Name2,Name3"
的字符串。
現在您可以使用foreach
來使用查詢:
foreach(var x in query)
{
Console.WriteLine("Code: {0} Names: {1} Amount: {2}"
, x.Code, x.Names, x.Amount);
}
除了使用LINQ擴展方法.GroupBy()
和.Select()
您還可以使用純LINQ語句,如果您來自SQL背景, .GroupBy()
易於閱讀。
var ls = new List<Object2>();
var newLs = from obj in ls
group obj by obj.code into codeGroup
select new { code = codeGroup.Key, amount = codeGroup.Sum(s => s.amount) };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.