繁体   English   中英

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

在文件的顶部,我有“使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM