<一>先看一个场景:
现在有一个list,类型为List<ModelStoreInfo>,结果集为
GroupId | StoreId | StoreName | RegionName |
---|---|---|---|
1 | 54 | 虹桥机场店 | 上海特别区 |
1 | 24 | 东方体育中心点 | 上海特别区 |
2 | 65 | 白云机场店 | 广州特区 |
2 | 11 | 越秀店 | 广州特区 |
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()函数的介绍百度一搜一大把,这里就不再细说