有没有办法缩短这三个lambda表达式?现在我需要三个步骤才能得到结果。
首先,我查找属于“某人”的所有目标。然后,我在链接表中查找属于这些目标的所有projectId。最终的lambda按其id返回所有项目。
我不禁想到有一种更有效的方法,但我似乎无法找到它......
public async Task<List<Project>> GetProjectsFromSomeone(string someone) {
var targetIds = from target in Context.Targets
where target.Someone.ToLower().Contains(someone.ToLower())
select target.Id;
var projectIds = from pt in Context.ProjectTargets
where targetIds.Any(id => id == pt.TargetId)
select pt.ProjectId;
var projects = from prj in Context.Projects
where projectIds.Any(id => id == prj.Id)
select prj;
return await projects.ToListAsync();
}
public class ProjectTarget
{
public int ProjectId { get; set; }
public int TargetId { get; set; }
public Project Project { get; set; }
public Target Target { get; set; }
}
public class Target
{
public int Id { get; set; }
public string Code { get; set; }
public string Someone { get; set; }
}
public class Project
{
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:6)
您可以使用Linq joins
。 Linq将负责连接和条件。
public async Task<List<Project>> GetProjectsFromSomeone(string someone)
{
var projects = from target in Context.Targets
join pt in Context.ProjectTargets on target.Id equals pt.TargetId
join prj in Context.Projects on pt.ProjectId equals prj.Id
where target.Someone.ToLower().Contains(someone.ToLower())
select prj;
return await projects.ToListAsync();
}
希望这有帮助!
答案 1 :(得分:1)
我认为您可以使用加入查询。
from P in Context.Projects
join PT in Context.ProjectTargets on P.Id equals PT.id
join T in Context.Targets on PT.TargetId equals T.id
.Select(m => new
{
//select the fields which you want select
});