有没有办法缩短这三个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; }
}
Run Code Online (Sandbox Code Playgroud)
你可以用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();
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |