结合两个LINQ表达式投影

时间:2014-01-15 08:11:08

标签: c# linq entity-framework lambda delegates

我有实体类:

public class Company
{
public int Id {get;set;}

public string Name {get;set;}

public int PrivateNumber {get;set;}

public DateTime Created {get;set;}

public DateTime? LastModified {get;set;}
}

我有DTO课程:

public class CompanyDTO
{
public int Id {get;set;}

public string Name {get;set;}

public int PrivateNumber {get;set;}
}

对于普通用户,我正在使用投影:

Expression<Func<Company, CompanyDTO>> proj1 = x => new CompanyDTO {
Id = x.Id,
Name = x.Name
};

对于高级用户,我也希望获得私人号码,因此我定义了第二个投影

Expression<Func<Company, CompanyDTO>> proj2 = x => new CompanyDTO {
PrivateNumber = x.PrivateNumber
};

在第一个场景中,我写了这样的东西:

CompanyDTO dto = ctx.Companies.Where(x => x.Id == id).Select(proj1).FirstOrDefault();

对于第二种情况,我想用proj2中定义的内容扩展我的proj1,以便我可以将上面的查询改进为:

CompanyDTO dto = ctx.Companies.Where(x => x.Id == id).Select(proj).FirstOrDefault();

proj是:

  • 场景1:proj = proj1
  • 场景2:使用proj2
  • 扩展proj = proj1

这是可行的吗?如果是,那该怎么办?

0 个答案:

没有答案