c# - C# - EF Lambda Include 用于选择 2 个类并从第二个类中排除属性
问题描述
我正在尝试找到一个解决方案来避免从我的其他类中选择其他属性。
假设我有 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。因为在Include中,它选择了Class2中的其他属性。不仅是 Name1,还有 Name2-Name6。
这是出于性能角度和数据获取速度的考虑。
既然我不需要 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 上执行 Select,但在 Select 中创建 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 })
})
推荐阅读
- angular - 新应用版本发布后 Angular 如何处理延迟加载
- android - 如何将多维 JSON 数组主体格式化为 kotlin 中的数据类
- regex - 使用正则表达式将字符串与对象的多个值匹配?
- sql - SQL:引用整个表的最佳方式
- mariadb - 如何在 Update 语句中将变量设置为列,当通过 Select 检索变量中的 columnName 到变量 mariadb
- julia - 如何将自定义图像数据集从 kaggle 添加到 Metalhead.jl/Flux.jl julia
- json - 自定义 WordPress 主题错误 - 解析器错误:语法错误:JSON.parse:JSON 数据第 2 行第 12 列的意外字符
- asp.net - Ocelot 不转发请求正文
- angular - 引发错误的角度单元测试失败
- jquery - 如何在搜索事件或过滤事件上对 jquery 数据表的列求和