Leg*_*ion 3 .net c# linq linq-to-sql
通常,当我使用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");
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为你已经声明它IQueryable而不是IQueryable<T>.看到这个链接,你习惯了所有多汁的扩展方法,定义:)
现在,我明白为什么要这样做,因为你正在创建动态对象.考虑创建一个POCO类,ala:
public class MyPOCO
{
public int DepartmentID { get; set; }
public string FullName { get; set; }
/* etc... */
}
Run Code Online (Sandbox Code Playgroud)
然后有:
IQueryable<MyPOCO> departments;
Run Code Online (Sandbox Code Playgroud)
显然,创建新MyPOCO的而不是动态对象.
编辑
正如D Stanley在评论中指出的那样,如果您不想仅为此操作创建POCO,如果您声明departments为var departments,则您将获得正确的类型.