如何解决没有聚合功能的C#Linq2Sql GroupBy
我有下表
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功能就无法做到这一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。