C# Linq嵌套查询或内部查询
假设我有一个员工列表,每个员工都有几个项目。我可以使用以下方法获得给定员工:C# Linq嵌套查询或内部查询,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,假设我有一个员工列表,每个员工都有几个项目。我可以使用以下方法获得给定员工: var employee = employees.SingleOrDefault(x => x.Id == "id"); 但我如何为员工筛选项目呢 例如: var employee = list .SingleOrDefault(x => x.Key == employeeKey && x.Projects.SingleOrDefaul
var employee = employees.SingleOrDefault(x => x.Id == "id");
但我如何为员工筛选项目呢
例如:
var employee = list
.SingleOrDefault(x => x.Key == employeeKey &&
x.Projects.SingleOrDefault(p => p.Key == projectKey));
var employee=employees.SingleOrDefault(
x=>x.Id.Equals(“Id”)和&x.project.Equals(“project”)
);代码>使用Any()
LINQ方法
var employee = employees.SingleOrDefault(x => x.Id== "id" && x.Projects.Any(p => p.Id == "Id"));
此外,您是基于员工IDx.ID==“ID”
进行筛选的,而且大多数情况下,员工ID将是主键(本质上是唯一的),在这种情况下,仅通过ID
进行筛选就足够了,我相信如果您想在获得员工后筛选项目
,您可以使用.Select()
因此,您可以在一个步骤中获得所需的数据,但您必须自己指定属性
另一种方法是首先让您的员工,然后筛选项目,如:
var employee = employees.SingleOrDefault(x => x.Id== "id");
employee.Projects = employee.Projects.SingleOrDefault(p => p.Key == projectKey);
无论采用哪种方式,都会对员工及其项目进行筛选。如果找到或为空,SingleOrDefault将返回该对象。因此,在您的情况下,它返回所有员工,因为您没有测试任何东西。你刚才说如果项目在那里,就把它退回
如果存在或不存在,请使用将返回布尔值的任意值:
var employee = list.SingleOrDefault(x => x.Key == customerKey && x.Projects.Any(p => p.Key == projectKey));
如果他只有一个具有特定密钥的项目,则需要进行筛选:
var employee = list.SingleOrDefault(x => x.Key == customerKey && x.Projects.Count(p => p.Key == projectKey) == 1);
您也可以使用SingleOrDefault实现,但可以使用null测试该值:
var employee = list.SingleOrDefault(x => x.Key == customerKey && x.Projects.SingleOrDefault(p => p.Key == projectKey) != null);
如果希望返回类型更具体,请使用select
如果不起作用,请尝试将“包括”添加到列表中:
list.Include("Projects").... the rest of the query
我需要按Id筛选项目Summine usex.project.Id==Id
在员工实体或其他实体中执行项目之后(&Do)?是否要按Id筛选员工并按其Id筛选该员工的所有项目?或者仅通过employee.Id
和Project.Id
筛选员工。.ToList()
是多余的,因为您只有一名员工。
list.Include("Projects").... the rest of the query