IQueryable没有计数()
本文关键字:IQueryable | 更新日期: 2023-09-27 18:21:48
通常,当我使用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");
}
}
这是因为您已将其声明为IQueryable
而不是IQueryable<T>
。请参阅此链接,其中定义了您习惯的所有有趣的扩展方法:)
现在,我明白你为什么这么做了,因为你正在创建动态对象。考虑创建一个POCO类,ala:
public class MyPOCO
{
public int DepartmentID { get; set; }
public string FullName { get; set; }
/* etc... */
}
然后有:
IQueryable<MyPOCO> departments;
显然,创建新的MyPOCO
而不是动态对象。
编辑
正如D Stanley在评论中指出的那样,如果你不想只为这个操作创建一个POCO,如果你将departments
声明为var departments
,你就会得到正确的类型。
在c#的新ish功能中找到了一个解决方案。我用过:
IQueryable<dynamic> departments;
我以前没有见过dynamic
,但它显然允许您将匿名类型与泛型一起使用。