Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC是否创建包含每个用户列表的变量?_C#_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC是否创建包含每个用户列表的变量?

C# ASP.NET MVC是否创建包含每个用户列表的变量?,c#,asp.net-mvc,C#,Asp.net Mvc,在我的web应用程序中,我有一个表Employees,其中包含员工ID和他们的siteID列。此表中有更多的列 我有另一个名为SitesPerEmployee的表,它只有两列EmployeeID和SiteID,我用来授予登录用户访问权限,因此他们只能在该表中查看基于他们被授予访问权限的站点的信息,每个员工可能有多个站点,因此创建了该表 这是我的代码: string name = Session["Name"].ToString(); var EmployeeIDCatch = db.Employ

在我的web应用程序中,我有一个表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表中给出的登录用户访问权限相同的员工


现在我有两个错误。无法隐式地将代码中的类型“System.Linq.IQueryable”转换为“int”,其中c.EmployeeID=EmployeeIDCatch和e.SiteID=des

您将收到错误,因为您正在将整数列表des与位于的单个整数SiteID进行比较。其中e=>e.SiteID=des

你可以这样做:

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));

出现错误,因为您正在将整数列表des与位于的单个整数站点ID进行比较。其中e=>e.SiteID=des

你可以这样做:

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));
此查询返回IQueryable而不是int:

您应该使用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;
此查询返回IQueryable而不是int:

您应该使用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;

你还没说,但我猜e.SiteID=des是不是给你带来了问题?你能澄清一下吗?抱歉,但是是的,而且c.EmployeeID=EmployeeIDCatch都给出了相同的错误。我知道这是因为我试图将一份员工ID列表与一份进行比较。可能有解决方法吗?您是否考虑过使用“”,您需要在此处使用==而不是=:其中c.EmployeeID==EmployeeIDCatch。这与其他错误不同。single=也出现在最后一行中,但您需要使用它。根据下面的答案包含。@PeterB谢谢,我相对处于c,我有点困惑何时使用==和=您还没有说,但我想e.SiteID=des是给您带来问题的位吗?你能澄清一下吗?抱歉,但是是的,而且c.EmployeeID=EmployeeIDCatch都给出了相同的错误。我知道这是因为我试图将一份员工ID列表与一份进行比较。可能有解决方法吗?您是否考虑过使用“”,您需要在此处使用==而不是=:其中c.EmployeeID==EmployeeIDCatch。这与其他错误不同。single=也出现在最后一行中,但您需要在那里使用。Contains根据下面的答案。@PeterB谢谢,我相对处于c状态,我有点困惑何时使用==和=使用where=>des.Containse.SiteID确实解决了一个错误,但前两行现在给出了新的错误运算符“==”不能应用于“int”和“HolidayTracker.Models.Employee”类型的操作数,也不能将“int”类型隐式转换为“bool”,我意识到SingleOrDefault方法在以前的代码中定位错误。检查编辑是否返回正确的标量int值,而不是HolidayTracker.Models.Employee.Yes。错误已经消失,但是当我运行时,我得到一个新的错误序列包含多个元素。此代码是否确保employeeSearch可以包含在SitesPerEmployee表中输入的多个站点。也许这就是这个错误的来源??如果查询结果有多个元素,也许您应该尝试FirstOrDefault。是的!!现在工作完美!!谢谢Tetsuya的帮助!!使用where=>des.Containse.SiteID确实解决了一个错误,但前两行现在给出了新的错误运算符“==”不能应用于“int”和“HolidayTracker.Models.Employee”类型的操作数,也不能将“int”类型隐式转换为“bool”,我意识到SingleOrDefault方法在以前的代码中定位错误。检查编辑是否返回正确的标量int值,而不是HolidayTracker.Models.Employee.Yes。错误已经消失,但是当我运行时,我得到一个新的错误序列包含多个元素。此代码是否确保employeeSearch可以包含在SitesPerEmployee表中输入的多个站点。也许这就是这个错误的来源??如果查询结果有多个元素,也许您应该尝试FirstOrDefault。是的!!现在工作完美!!谢谢Tetsuya的帮助!!