不带聚合函数的C#Linq2Sql GroupBy

不带聚合函数的C#Linq2Sql GroupBy,c#,linq-to-sql,C#,Linq To Sql,我有下表 Login Permission user1 A user1 B user2 A user2 B 我希望得到以下输出: user1 A,B user2 A,B 为此,我使用GroupBy方法 var results = (from p in _dbContext.Users group p by new { p.Login } into g

我有下表

Login  Permission
user1      A      
user1      B      
user2      A      
user2      B      
我希望得到以下输出:

user1 A,B
user2 A,B
为此,我使用GroupBy方法

var results = (from p in  _dbContext.Users
               group p by new { p.Login } into g
                select new { Login = g.Key.Login, 
                             Permissions = string.Join(",", g.Select(x => x.Permission)).ToList()

但是如果没有任何聚合函数,给定的代码将失败。如何修复它?

没有标准的SQL方法将字符串连接为分组函数,因此在Linq2Sql中不支持这样做

但是,您可以使用内存中的Linq,方法是使用
AsEmumerable()
将处理从Linq2Sql切换到内存中的Linq:

var results = (from p in  _dbContext.Users.AsEnumerable()
               group p by new { p.Login } into g
               select new { Login = g.Key.Login, 
                         Permissions = string.Join(",", g.Select(x => x.Permission)).ToList();

请注意,这会将整个
Users
表拉入内存,以便进行连接,但除非您的Users表很大,否则这不会是一个大问题。如果是,那么您可以研究一些SQL技巧来进行字符串连接,或者将其转换为存储过程以从Linq调用,或者传入自定义SQL查询。但是单靠Linq功能是无法做到这一点的。

默认情况下,
groupby
要求在
select
查询中有一个
aggregate
函数,但在这种情况下,我不需要任何
aggregate
函数,因此SQL的问题就是这样的,那么,您是在使用LINQ to EF 6.x/EF Core 2.0/2.1/3.x/5吗?实际上,LINQ to SQL处理得很好-它通过
p.Login
上的
query将其转换为SQL
GROUP,然后对
Select
x.Permission
)中的列对每个组运行单独的查询。无法翻译的是LINQ到EF 6.x/EF Core 3.x/5。