C# FirstOrDefault() 即使使用 System.Linq 也无法正常工作
C# FirstOrDefault() not working even with using System.Linq
此处为C#初学者:我只想查看有与当前用户年龄相同的员工的设施。
出于某种原因 FirstOrDefault()
下面有一条红线:
'Facility' 不包含 'FirstOrDefault' 的定义,并且找不到接受类型 'Facility' 的第一个参数的可访问扩展方法 'FirstOrDefault' (您是否缺少 using 指令或程序集引用?
这是一行:
facilities = facilities.Where(facility => facility.Employee.FirstOrDefault().Age == (int)HttpContext.User.GetAge());
在文件的顶部,我有“using System.Linq”,我知道这是有效的,因为没有它就会在 Where 上出错。所以,我想知道还有什么可能导致此问题?
试试这个。首先,您需要根据谓词过滤值序列,然后 return 序列的第一个元素。 Read more here
facilities = facilities.Where(facility => facility.Employee.Age == (int)HttpContext.User.GetAge()).FirstOrDefault();
这样更易读,
var userAge = (int)HttpContext.User.GetAge();
facilities = facilities.Where(facility => facility.Employee.Age == userAge).FirstOrDefault();
同意@Metro,你可以简单地使用,
var userAge = (int)HttpContext.User.GetAge();
var facility = facilities.FirstOrDefault(facility => facility.Employee.Age == userAge);
您已经在迭代 facilities
并且我相信 Employee
属性 与 Facility
class 具有一对一关系,即 Employee 不是列表.
下面的代码就可以工作
var emp_age = HttpContext.User.GetAge() as int;
facilities = facilities.Where(facility => facility.Employee.Age == emp_age);
错误是因为 facility.Employee
没有实现 FirstOrDefault
方法。可能不是 List/IEnumerable
(或一般的 ICollection
)。
您可以先按年龄比较,然后使用 FirstOrDefault
int age = (int)HttpContext.User.GetAge();
facilities = facilities.Where(facility => facility.Employee.Age == age).FirstOrDefault();
假设facility.Employee是列表类型:
var userAge = (int)HttpContext.User.GetAge();
facilities.Where(facility => facility.Employee.Any(e => e.Age.Equals(userAge)));
如果不是并且每个设施只有一名员工,则
var userAge = (int)HttpContext.User.GetAge();
facilities.Where(facility => facility.Employee == userAge);
此处为C#初学者:我只想查看有与当前用户年龄相同的员工的设施。
出于某种原因 FirstOrDefault()
下面有一条红线:
'Facility' 不包含 'FirstOrDefault' 的定义,并且找不到接受类型 'Facility' 的第一个参数的可访问扩展方法 'FirstOrDefault' (您是否缺少 using 指令或程序集引用?
这是一行:
facilities = facilities.Where(facility => facility.Employee.FirstOrDefault().Age == (int)HttpContext.User.GetAge());
在文件的顶部,我有“using System.Linq”,我知道这是有效的,因为没有它就会在 Where 上出错。所以,我想知道还有什么可能导致此问题?
试试这个。首先,您需要根据谓词过滤值序列,然后 return 序列的第一个元素。 Read more here
facilities = facilities.Where(facility => facility.Employee.Age == (int)HttpContext.User.GetAge()).FirstOrDefault();
这样更易读,
var userAge = (int)HttpContext.User.GetAge();
facilities = facilities.Where(facility => facility.Employee.Age == userAge).FirstOrDefault();
同意@Metro,你可以简单地使用,
var userAge = (int)HttpContext.User.GetAge();
var facility = facilities.FirstOrDefault(facility => facility.Employee.Age == userAge);
您已经在迭代 facilities
并且我相信 Employee
属性 与 Facility
class 具有一对一关系,即 Employee 不是列表.
下面的代码就可以工作
var emp_age = HttpContext.User.GetAge() as int;
facilities = facilities.Where(facility => facility.Employee.Age == emp_age);
错误是因为 facility.Employee
没有实现 FirstOrDefault
方法。可能不是 List/IEnumerable
(或一般的 ICollection
)。
您可以先按年龄比较,然后使用 FirstOrDefault
int age = (int)HttpContext.User.GetAge();
facilities = facilities.Where(facility => facility.Employee.Age == age).FirstOrDefault();
假设facility.Employee是列表类型:
var userAge = (int)HttpContext.User.GetAge();
facilities.Where(facility => facility.Employee.Any(e => e.Age.Equals(userAge)));
如果不是并且每个设施只有一名员工,则
var userAge = (int)HttpContext.User.GetAge();
facilities.Where(facility => facility.Employee == userAge);