[C#]分组数据的详细信息为一体,价格字段应该用分号分隔

标签: Linq .Net C#
发布时间: 2017/2/27 3:58:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这项要求,需要对数据进行分组到 OrderNum,价格需要合并成一行用分号分隔,这由类型决定。呢通过循环访问结果,但可能还有更好的方式做它特别是在 LINQ 中。

var notebooks = new List<NoteBook>
            {
                new NoteBook { Type = 1, Currency = "USD", Price = 1000, OrderNum = "123" },
                new NoteBook { Type = 2, Currency = "USD", Price = 2000, OrderNum = "123" },
                new NoteBook { Type = 0, Currency = "USD", Price = 3000, OrderNum = "456" },
                new NoteBook { Type = 0, Currency = "USD", Price = 4000, OrderNum = "789" },
                new NoteBook { Type = 4, Currency = "USD", Price = 5000, OrderNum = "753" }

            };

            var results = from r in notebooks
                          group r by new { r.OrderNum } into g
                          select new
                              {
                                  Currency = g.First().Currency,
                                  OrderNum = g.First().OrderNum,
                                  Price = ???
                              };

我期待的结果

Currency OrderNum Price  
USD   123   1000; 2000  
USD   456   3000  
USD   789   4000  
USD   753   5000  

解决方法 1:

不知道从你的描述类型应如何使用在这里,但要形成一个单一的价格线你可以使用 String.Join :

Price = String.Join(";", g.Select(x => x.Price))

和只是以防万一你正在运行.Net 版本 4.0 以上,一定要转换为数组的第二个参数︰

Price = String.Join(";", g.Select(x => x.Price).ToArray())
赞助商