C# 使用“count”子句将SQL查询转换为LinQ

C# 使用“count”子句将SQL查询转换为LinQ,c#,sql-server,linq,C#,Sql Server,Linq,下面我的SQL Server查询工作得非常好,我正在尝试将其转换为C中的LinQ SQL查询: 期望输出为: 我能够以下面的格式绘制LinQ查询,这给了我正确的输出 除计数*为“机构编号”外 LINQ查询: 这给了我“机构编号”的计数=3 我无法正确获得计数方面。我参考了post的答案,它只给出了count,但我无法将其嵌套在LinQ查询中。 任何有帮助的输入都将不胜感激。我认为您可以使用此LinQ: var obj = dbContext.InstitutionEnquiry

下面我的SQL Server查询工作得非常好,我正在尝试将其转换为C中的LinQ

SQL查询:

期望输出为:

我能够以下面的格式绘制LinQ查询,这给了我正确的输出 除计数*为“机构编号”外

LINQ查询:

这给了我“机构编号”的计数=3

我无法正确获得计数方面。我参考了post的答案,它只给出了count,但我无法将其嵌套在LinQ查询中。
任何有帮助的输入都将不胜感激。

我认为您可以使用此LinQ:

var obj = dbContext.InstitutionEnquiry
        // WHERE CITY = 'AHMEDABAD'
        .Where(w => w.City == "AHMEDABAD")  // => Note           
        // GROUP BY addressline3, city
        .GroupBy(g => new {g.AddressLine3, g.City})
        // SELECT addressline3, city, COUNT(*) as 'InstitutionNumber'
        .Select(c => new {c.Key.AddressLine3, c.Key.City, InstitutionNumber = c.Count()})
        // ORDER BY city
        .OrderBy(o=> o.City)
        .ToList();
注意:对于忽略区分大小写,您可以使用:

.Where(string.Equals(w.City.Trim(), data.Trim(), StringComparison.CurrentCultureIgnoreCase))

我想你可以用这个LinQ:

var obj = dbContext.InstitutionEnquiry
        // WHERE CITY = 'AHMEDABAD'
        .Where(w => w.City == "AHMEDABAD")  // => Note           
        // GROUP BY addressline3, city
        .GroupBy(g => new {g.AddressLine3, g.City})
        // SELECT addressline3, city, COUNT(*) as 'InstitutionNumber'
        .Select(c => new {c.Key.AddressLine3, c.Key.City, InstitutionNumber = c.Count()})
        // ORDER BY city
        .OrderBy(o=> o.City)
        .ToList();
注意:对于忽略区分大小写,您可以使用:

.Where(string.Equals(w.City.Trim(), data.Trim(), StringComparison.CurrentCultureIgnoreCase))

第一个观察结果是,由于SQL有一个GroupBy,LINQ也应该有一个GroupBy

第二个观察结果是,由于SQL中的非聚合列是按列分组的,因此在LINQ中选择的结果将来自组的键

现在我们可以编写查询:

var res = dbContext.InstitutionEnquiry
.Where(u => u.City == data.Trim().ToLower())
.GroupBy(u => new {
    AddressLine3 = u.AddressLine3.Trim().ToLower(),
    City = u.City.Trim().ToLower()
 }).Select(g => new {
     g.Key.AddressLine3,
     g.Key.City,
     Count = g.Count()
}).ToList();

第一个观察结果是,由于SQL有一个GroupBy,LINQ也应该有一个GroupBy

第二个观察结果是,由于SQL中的非聚合列是按列分组的,因此在LINQ中选择的结果将来自组的键

现在我们可以编写查询:

var res = dbContext.InstitutionEnquiry
.Where(u => u.City == data.Trim().ToLower())
.GroupBy(u => new {
    AddressLine3 = u.AddressLine3.Trim().ToLower(),
    City = u.City.Trim().ToLower()
 }).Select(g => new {
     g.Key.AddressLine3,
     g.Key.City,
     Count = g.Count()
}).ToList();
林克:

等效Lambda表达式:

var obj = dbContext.InstitutionEnquiry
.GroupBy(p => new { p.addressline3, p.city})
.Select(p => new { p.Key.addressline3, p.Key.city, InstitutionNumber = p.Count() })
.ToList();
林克:

等效Lambda表达式:

var obj = dbContext.InstitutionEnquiry
.GroupBy(p => new { p.addressline3, p.city})
.Select(p => new { p.Key.addressline3, p.Key.city, InstitutionNumber = p.Count() })
.ToList();

当来自数据库的“u”为大写时,为什么要将“data”转换为小写的u.City==data.Trim.ToLower?当来自数据库的“u”为大写时,为什么要将“data”转换为小写的u.City==data.Trim.ToLower?