繁体   English   中英

使用 EF Core 进行 LINQ 选择并转换为派生类而不复制属性

[英]LINQ select with EF Core and cast to derived class without copying properties

我有一个 LINQ 从数据库中选择记录:

List<Companies> enabledCompanies;
using (var ctx = new NavigatorContextExt())
{
    enabledCompanies = ctx.Companies
    .Where(e => e.Enabled)
    .ToList();
}

我有一个从CompaniesExt类派生的Companies类,其中包含一些稍后要计算的额外属性。 我希望 LINQ 返回CompaniesExt类。

我尝试了以下方法:

List<CompaniesExt> enabledCompanies;
using (var ctx = new NavigatorContextExt())
{
    enabledCompanies = ctx.Companies
    .Where(e => e.Enabled)
    .Cast<CompaniesExt>()
    .ToList();
}

但是我得到了一个 InvalidCastException。 这个演员是不可能做到的吗? 我应该只使用 LINQ 选择到CompaniesExt并手动复制所有属性吗?

您从 EF 获得的实体的实际运行时类型是Company ,所以不,您不能神奇地将其转换为派生类。

但是不需要从实体派生只是为了添加一些属性。 只需在您的实体中使用[NotMapped]注释:

public class Company
{
     public int CompanyID {get;set;}
     // ... other DB properties

     [NotMapped]
     public string SomeProperty { get; set; }
}

如果生成了实体,则可以使用分部类来添加未映射的属性:

public partial class Company // other part in generated file
{
     [NotMapped]
     public string SomeProperty { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM