ASP.NET MVC创建一个包含每个用户列表的变量?

时间:2019-02-01 09:32:29

标签: c# asp.net-mvc

在我的Web应用程序中,我有一个表Employees,其中包含Employees ID及其siteID的列。 (此表中有更多列)

我还有一个名为SitesPerEmployee的表,该表只有两列EmployeeIDSiteID,我曾经向已登录的用户授予访问权限,因此他们只能根据自己的网站查看信息可以访问此表(每个员工可能有多个站点),因此可以创建此表。

这是我的代码:

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 = EmployeeIDCatche.SiteID = des

2 个答案:

答案 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;