计算列中的值

时间:2010-12-24 10:08:08

标签: c# linq-to-sql

我想计算列中的不同值。列包含这样的数据

Locations
Street1
Street2
Street3
Street1,Street2
Street2,
Street1,Street2,Street3

现在数量应该像是 Street1(3)
Street2(4)
Street3(2)

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});