在域服务类和实体数据模型中努力将SQL查询转换为Linq

在域服务类和实体数据模型中努力将SQL查询转换为Linq,sql,linq,group-by,anonymous,Sql,Linq,Group By,Anonymous,Visual Studio 2008 | Silverlight 3 | SQL Server 2005 |域服务类|实体数据模型 我有一个数据库表“Students”,其中有列FirstName、LastName、Semmer、ProgramOfStudy、Column等 目标是根据给定的学期和学习计划中所有学生的姓氏首字母,返回一个总数(按姓氏首字母分组的学生人数) 以下是有效的SQL: SELECT DISTINCT TOP (100) PERCENT LEFT(lastName, 1)

Visual Studio 2008 | Silverlight 3 | SQL Server 2005 |域服务类|实体数据模型

我有一个数据库表“Students”,其中有列FirstName、LastName、Semmer、ProgramOfStudy、Column等

目标是根据给定的学期和学习计划中所有学生的姓氏首字母,返回一个总数(按姓氏首字母分组的学生人数)

以下是有效的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; }
}
public List GetAlphaCount(int-cycleID,string-programCode)
{
列表查询=(来自db.UM_StudentSet中的c)
其中c.academicPeriod==200980&&c.programCode==“BSED-ELED-ED”
按c.lastName[0]将c分组到cg中
选择新的lastLetterCounts{LastNameStartsWith=cg.Key.ToString(),Total=cg.Count(),academicPeriod=cycleID,programCode=programCode}).ToList();
返回查询;
}
公共类邮件数
{
[关键]
公共字符串LastNameStartsWith{get;set;}
公共整数总计{get;set;}
公共周期{get;set;}
公共字符串程序代码{get;set;}
}
解决方案编译并执行,但不返回任何数据。我不知道如何调试它,因为linq的计算结果是一大块


同样的问题也会被问到,但方法不同。

为什么要在linq中这样做?只需使用存储过程并返回您想要返回的内容。如果您正在使用Linq to Sql,并且在Entity Framework v1中更具挑战性,那么这是非常容易的,但可能是最好的方法。谢谢您的回复。我在存储过程和实体框架中完成了这项工作。它返回的结果与我在本文中描述的相同。我将以LINQtoSQL的方式尝试它,并将它的工作原理发回。awright18,我成功地使用LINQtoSQL类和WCF服务实现了这一点。它作为存储过程工作,作为在DBML中查询视图和分组LINQ。因此,这意味着实体框架不能正常工作。很高兴知道出了什么问题。