我正在尝试找到一个解决方案,如何避免从我的其他类中选择其他属性。
假设我有 2 个类,名称为 Class1 和 Class2,我只想在我的 Class2 中选择 Name1。
// My Models
public class Class1 {
public int Class1Id {get;set;}
public string Gender {get;set;}
public ICollection<Class2> Class2 {get;set;}
}
public class Class2{
public int Class2Id {get;set;}
public string Name1 {get;set;}
public string Name2 {get;set;}
public string Name3 {get;set;}
public string Name4 {get;set;}
public string Name5 {get;set;}
public string Name6 {get;set;}
public int Class1Id {get;set;}
public Class1 Class1 {get;set;}
}
我有一个获取 Class1 中所有记录的方法
public IQueryable<Class1> AllClass1(){
return context.Class1.Include(c=>c.Class2);
}
这将起作用,但问题是,我只想选择 Class2.Name1。因为在"包含"中,它从 Class2 中选择其他属性。不仅是名称 1,还有名称 2-名称 6。
这是出于性能角度以及获取数据的速度。
既然,我不需要 Name2-Name6,为什么我也选择获取它们?
只需选择您的属性作为字符串数组即可
context.Class1.Include(c => c.Class2).SelectMany(x => x.Class2).Select(x => x.Prop1)
如果您希望属性位于类类型的数组中,只需在 select 方法中创建它的新实例
context.Class1.Include(c=>c.Class2).SelectMany(x => x.Class2).Select(x => new Class2() { Prop1 = x.Prop1 })
如果您希望 Class2 实例成为 Class1 的一部分,您可以在 Class1 上进行选择,但在 选择映射 Class1 的每个属性并设置 Class2 数组,如上面的代码所示
context.Class1.Include(c=>c.Class2).Select (x => new Class1() {
Prop1 = x.Prop1,
Prop2 = x.Prop2,
...
Class2 = x.Class2.Select(y => new Class2() { Prop1 = y.Prop1 })
})
参见 如何在实体框架 6.1 中仅加载子对象的某些字段?