C# 对列中的值进行计数

C# 对列中的值进行计数,c#,linq-to-sql,C#,Linq To Sql,我想计算列中不同的值。列包含如下数据 Locations Street1 Street2 Street3 Street1,Street2 Street2, Street1,Street2,Street3 现在计数应该是 街道1(3) 街道2(4) Street3(2)我想不出一个简单的方法来使用LINQtoSQL实现这一点 当然,一种简单的方法(如果您负担得起的话)是将表中的所有行带回客户机,然后使用LINQ对对象进行查询 var query = myDataContext

我想计算列中不同的值。列包含如下数据

Locations
Street1
Street2
Street3
Street1,Street2
Street2,
Street1,Street2,Street3
现在计数应该是
街道1(3)
街道2(4)

Street3(2)

我想不出一个简单的方法来使用LINQtoSQL实现这一点

当然,一种简单的方法(如果您负担得起的话)是将表中的所有行带回客户机,然后使用LINQ对对象进行查询

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


另一方面,我强烈建议规范化数据库模式。在列中存储分隔列表不是一个好主意。

在数据库中它只是逗号分隔的吗?这不会让生活变得轻松…wtf?你的数据库是什么?sql server或excel?:)@RPM1984:linq to sql标记表示sql Server。@Ani-是的,我知道,这是个笑话。:)@RPM1984:啊,我明白了。抱歉,看来我今天很胖。:)
var result = Locations
    .SelectMany(s => s.Split(','))
    .GroupBy(s => s, (loc,b) => new { loc, b.ToList().Count});