1

视觉工作室 2008 | 银光 3 | SQL Server 2005 | 域服务类 | 实体数据模型

我有一个数据库表“学生”,其中包含 FirstName、LastName、Semester、ProgramOfStudy、Column 等列......

目标是根据给定SemesterProgramofstudy中所有学生的姓氏的第一个字母返回一个总数(按姓氏的第一个字母分组的学生人数) 。

这是有效的SQL:

SELECT DISTINCT TOP (100) PERCENT LEFT(lastName, 1) AS 'LastNameStartsWith', COUNT(*) AS 'Total', academicPeriod, programCode
FROM         dbo.UM_Students
GROUP BY LEFT(lastName, 1), academicPeriod, programCode
ORDER BY programCode, academicPeriod, 'LastNameStartsWith'

这是在 LinqPad 中工作的 LINQ:

var query = from c in UM_Students
            where c.AcademicPeriod == 200980 && c.ProgramCode == "BSED-ELED-ED"
            group c by c.LastName[0] into cg
            select new { LastNameStartsWith = cg.Key.ToString(), Total = cg.Count(), AcademicPeriod = 200980, ProgramCode =  "BSED-ELED-ED" };
query.Dump();

我无法将其转换为我的域服务类。主要问题是返回类型错误并处理匿名类型。

这是我到目前为止的努力:

public List<lastLetterCounts> GetAlphaCount(int cycleID, string programCode)
{
    List<lastLetterCounts> query = (from c in db.UM_StudentSet
        where c.academicPeriod == 200980 && c.programCode == "BSED-ELED-ED"
        group c by c.lastName[0] into cg
        select new lastLetterCounts { LastNameStartsWith = cg.Key.ToString(), Total = cg.Count(), academicPeriod = cycleID, programCode = programCode }).ToList();

    return query;
}

public class lastLetterCounts
{
    [Key]
    public string LastNameStartsWith { get; set; }
    public int Total { get; set; }
    public int academicPeriod { get; set; }
    public string programCode { get; set; }
}

解决方案编译并执行,但不返回任何数据。我不知道如何调试它,因为 linq 评估为一大块。

这里也提出了同样的问题,但采用了不同的方法。

4

0 回答 0