Joh*_*nes 16 linq csv group-concat linq-group
我正在寻找LINQ等效于Sybase的LIST()或MySQL的group_concat()
它会转换:
User Hobby
--------------
Bob Football
Bob Golf
Bob Tennis
Sue Sleeping
Sue Drinking
Run Code Online (Sandbox Code Playgroud)
至:
User Hobby
--------------
Bob Football, Golf, Tennis
Sue Sleeping, Drinking
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
这就是GroupBy运营商.你在使用LINQ to Objects吗?
这是一个例子:
using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
static void Main()
{
var users = new[]
{
new { User="Bob", Hobby="Football" },
new { User="Bob", Hobby="Golf" },
new { User="Bob", Hobby="Tennis" },
new { User="Sue", Hobby="Sleeping" },
new { User="Sue", Hobby="Drinking" },
};
var groupedUsers = users.GroupBy(user => user.User);
foreach (var group in groupedUsers)
{
Console.WriteLine("{0}: ", group.Key);
foreach (var entry in group)
{
Console.WriteLine(" {0}", entry.Hobby);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是分组 - 你可以自己管理其余的吗?
看看这个解决方案是否有助于您
List<User> users = new List<User>()
{
new User {Name = "Bob", Hobby = "Football" },
new User {Name = "Bob", Hobby = "Golf"},
new User {Name = "Bob", Hobby = "Tennis"},
new User {Name = "Sue", Hobby = "Sleeping"},
new User {Name = "Sue", Hobby = "Drinking"}
};
var groupedUsers = from u in users
group u by u.Name into g
select new
{
Name = g.First<User>().Name,
Hobby = g.Select(u => u.Hobby)
};
foreach (var user in groupedUsers)
{
Console.WriteLine("Name: {0}", user.Name);
foreach (var hobby in user.Hobby)
{
Console.WriteLine("Hobby: {0}", hobby);
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法重新_concat考虑您的问题:
static class EnumerableExtensions
{
public static String AsJoined( this IEnumerable<String> enumerable )
{
return AsJoined( enumerable, "," );
}
public static String AsJoined( this IEnumerable<String> enumerable, String separator )
{
return String.Join( separator, enumerable.ToArray() );
}
}
Run Code Online (Sandbox Code Playgroud)
在bruno conde中输出的foreach和Jon Skeet的答案可以变成:
Console.WriteLine( "User:\tHobbies");
foreach ( var group in groupedUsers )
Console.WriteLine( "{0}:\t{1}", group.Key, group.Select( g => g.Hobby ).AsJoined( ", " ) );
Run Code Online (Sandbox Code Playgroud)
...,您将获得所需的精确结果输出格式(是的,我知道其他人已经解决了您的问题,但是很难抗拒!)
| 归档时间: |
|
| 查看次数: |
31129 次 |
| 最近记录: |