在我的Web应用程序中,我有一个表Employees
,其中包含Employees ID
及其siteID
的列。 (此表中有更多列)
我还有一个名为SitesPerEmployee
的表,该表只有两列EmployeeID
和SiteID
,我曾经向已登录的用户授予访问权限,因此他们只能根据自己的网站查看信息可以访问此表(每个员工可能有多个站点),因此可以创建此表。
这是我的代码:
string name = Session["Name"].ToString();
var EmployeeIDCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.EmployeeID);
var des = (from c in db.SitesPerEmployees where c.EmployeeID = EmployeeIDCatch select c.SiteID);
var employeesSearch = db.Employees.Include(e => e.Area).Include(e => e.Discipline).Include(e => e.Shift).Include(e => e.Site).Where(e => e.SiteID = des);
我需要它,因此变量employeeSearch
仅包含SiteID与SitesPerEmployee
表
现在我遇到两个错误。代码中的Cannot implicitly convert type 'System.Linq.IQueryable<int>' to 'int'
where c.EmployeeID = EmployeeIDCatch
和e.SiteID = des
答案 0 :(得分:5)
收到错误消息是因为您正在比较.Where(e => e.SiteID = des);
处的整数(des)与单个整数(SiteID)的列表。
您可以这样做:
var employeesSearch = db.Employees.Include(e => e.Area).Include(e => e.Discipline).Include(e => e.Shift).Include(e => e.Site).Where(e => des.Contains(e.SiteID));
答案 1 :(得分:1)
此查询返回IQueryable<int>
而不是int
:
var EmployeeIDCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.EmployeeID);
您应该使用SingleOrDefault()
或FirstOrDefault()
来获取标量值:
// this query returns int value
var EmployeeIDCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.EmployeeID).SingleOrDefault();
// returns multiple SiteIDs
var des = (from c in db.SitesPerEmployees where c.EmployeeID == EmployeeIDCatch select c.SiteID);
var employeesSearch = db.Employees.Include(e => e.Area).Include(e => e.Discipline).Include(e => e.Shift).Include(e => e.Site).Where(e => des.Contains(e.SiteID));
作为第一次查询的替代方法,您可以使用以下方法:
var EmployeeIDCatch = db.Employees.Where(s => s.Email.Equals(name)).FirstOrDefault().EmployeeID;