[英]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());
在文件的顶部,我有“使用 System.Linq”,我知道它正在工作,因为没有它,Where 会出现错误。 所以,我想知道还有什么可能导致这个问题?
尝试这个。 首先,您需要根据谓词过滤一系列值,然后返回序列的第一个元素。 在这里阅读更多
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();
您已经在迭代facilities
,我相信Employee
属性与Facility
类具有一对一的关系,即 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
年龄进行比较,然后使用FirstOrDefault
int age = (int)HttpContext.User.GetAge();
facilities = facilities.Where(facility => facility.Employee.Age == age).FirstOrDefault();
假设 factory.Employee 是一个列表类型:
var userAge = (int)HttpContext.User.GetAge();
facilities.Where(facility => facility.Employee.Any(e => e.Age.Equals(userAge)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.