有没有办法缩短这三个lambda表达式?现在我需要三个步骤才能得到结果。
首先,我查找所有属于“某人”的目标。然后,我在链接表中查找所有属于这些目标的projectId。最终的lambda通过它们的id返回所有项目。
我不禁想到有一种更有效率的方法,但我似乎找不到...
首先,我查找所有属于“某人”的目标。然后,我在链接表中查找所有属于这些目标的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; }
}
select pt.ProjectId
改为select pt.Project
,那么第三个查询语句就没有用了。 - Camilo TerevintoToUpperInvariant
或带有 CultureInfo 的重载是无效的,因为这是被翻译成 SQL 的 EF。大多数数据库通常具有不区分大小写的排序规则,因此可能根本不需要进行大小写转换。 - juharr