我想计算列中的不同值。列包含这样的数据
Locations
Street1
Street2
Street3
Street1,Street2
Street2,
Street1,Street2,Street3
现在数量应该像是
Street1(3)
Street2(4)
Street3(2)
答案 0 :(得分:2)
我想不出用LINQ to SQL做这个的简单方法。
当然,一种简单的方法(如果你能负担得起),就是将表中的所有行返回给客户端,然后使用LINQ to Objects进行查询。
var query = myDataContext
.MyTable
.AsEnumerable()
.SelectMany(row => row.Locations.Split(','))
.GroupBy(location => location)
.Select(group => new { Location = group.Key, Count = group.Count() });
如果您想要以该格式替换字符串序列,请将最后一行替换为:
.Select(group => string.Format("{0} ({1})", group.Key, group.Count());
另一方面,我强烈建议规范化您的数据库架构。将分隔列表存储在列中不是一个好主意。
答案 1 :(得分:1)
var result = Locations
.SelectMany(s => s.Split(','))
.GroupBy(s => s, (loc,b) => new { loc, b.ToList().Count});