使用linq获取表中列的第一个字符

时间:2009-05-07 05:45:52

标签: sql-server linq

我正在寻找以下查询的LINQ等效项:

SELECT UPPER(SUBSTRING(CompanyName,1,1)),COUNT(*)FROM MyTable GROUP BY UPPER(SUBSTRING(CompanyName,1,1))

提前致谢。

1 个答案:

答案 0 :(得分:7)

好吧,我不知道它是否会转换为适当的SQL查询,但你可以试试这个:

var query = from company in db.MyTable
            let firstChar = company.CompanyName.Substring(0, 1).ToUpper()
            group company by firstChar into grouped
            select new { FirstChar = grouped.Key, Count = grouped.Count() };

这是一个LINQ to Objects示例:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main()
    {
        var companies = new[] {
            new { CompanyName = "One", CompanyID=1 },
            new { CompanyName = "Two", CompanyID=2 },
            new { CompanyName = "Three", CompanyID=3 },
            new { CompanyName = "Four", CompanyID=4 },
            new { CompanyName = "Five", CompanyID=5 },
            new { CompanyName = "Six", CompanyID=6 },
        };

        var query = from company in companies
            let firstChar = company.CompanyName.Substring(0, 1).ToUpper()
            group company by firstChar into grouped
            select new { FirstChar = grouped.Key, Count = grouped.Count() };

        foreach (var entry in query)
        {
            Console.WriteLine(entry);
        }
    }
}

结果:

{ FirstChar = O, Count = 1 }
{ FirstChar = T, Count = 2 }
{ FirstChar = F, Count = 2 }
{ FirstChar = S, Count = 1 }

我是否至少正确地说这是你期望看到的?