将某列相同的一组数据按逗号隔开拼成一行

<一>先看一个场景:

现在有一个list,类型为List<ModelStoreInfo>,结果集为

GroupIdStoreIdStoreNameRegionName
154虹桥机场店上海特别区
124东方体育中心点上海特别区
265白云机场店广州特区
211越秀店广州特区

ModelStoreInfo.cs定义:

        public int GroupId { get; set; }
        public int StoreId { get; set; }
        public string StoreName { get; set; }
        public string RegionName { get; set; }

在最终显示时,需要显示结果样式大致为>>

门店
1虹桥机场店,东方体育中心店
2白云机场店,越秀店

实现过程:

1,创建一个新的实体类ModelInfo.cs

        public int GroupId { get; set; }
        
        public string StoreName { get; set; }
        
        public List<ModelStoreInfo> StoreList { get; set; }

2,合并

 var resList = new List<ModelInfo>();
 resList=list.GroupBy(x => x.GroupId).Select(x => new ModelInfo { GroupId = x.Key, 
          StoreList = x.ToList()}).ToList();   //按GroupId合并list

 resList.ForEach(m =>
            {
                foreach (var item in m.StoreList)
                {
                    m.StoreNames = m.StoreNames + item.StoreName + ",";
                }
                m.StoreNames = m.StoreNames.Remove(m.StoreNames.LastIndexOf(",",                 
                StringComparison.Ordinal), 1);
            });

核心语法 list.GroupBy(_=>_.GroupId).Select(_ +> new ModelInfo{GroupId = x.Key, StoreList = x.ToList()}).ToList()

<二>下面介绍另一种方式,在数据库层使用Stuff()函数拼接字符串的方式实现该功能

 

SELECT SubStoreNames=STUFF( (select ','+StoreName
from TableName(NOLOCK)
		where GroupId=1 FOR XML PATH('') ), 1,1, '')

具体可以实践尝试下,STUFF()函数的介绍百度一搜一大把,这里就不再细说

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值