3

通常,当我使用 LINQ to SQL 时,我可以使用 Count() 来获取返回的记录数。但是,在这种情况下,Count() 方法不可用,就好像它没有为对象定义一样。我不确定为什么会这样。这是代码:

        IQueryable departments;

        if (role == "ADMIN")
        {
            departments =
                db.Departments.Select(d => new {d.DepartmentID, FullName = d.Division.DivisionName + ": " + d.DepartmentName})
                  .OrderBy(d => d.FullName);
        }
        else
        {
            departments =
                db.J_DeptAdmins.Where(jda => jda.AdminUserID == userID)
                  .Select(d => new {d.DepartmentID, FullName = d.Department.Division.DivisionName + ": " + d.Department.DepartmentName})
                  .OrderBy(d => d.FullName);

            if (departments.Count() > 0) //Error is here
            {
                drpDepartment.Style.Add("display", "none");
                lblDisplayDepartment.Style.Add("display", "none");
            }
        }
4

2 回答 2

7

这是因为您已将其声明为IQueryable而不是IQueryable<T>. 请参阅此链接,其中定义了您习惯的所有多汁的扩展方法:)

现在,我明白您为什么这样做了,因为您正在创建动态对象。考虑创建一个 POCO 类,ala:

public class MyPOCO
{
    public int DepartmentID { get; set; }
    public string FullName { get; set; }
    /* etc... */
}

然后有:

IQueryable<MyPOCO> departments;

显然,创建 new MyPOCOs 而不是动态对象。

编辑

正如 D Stanley 在评论中指出的那样,如果您不想仅为此操作创建 POCO,如果您声明departmentsvar departments,您将获得正确的类型。

于 2013-07-10T18:46:44.523 回答
0

在 c# 的新特性中找到了解决方案。我用了:

IQueryable<dynamic> departments;

我以前没见过dynamic,但它显然可以让你使用带有泛型的匿名类型。

于 2013-07-10T20:01:10.127 回答