gpt4 book ai didi

c# - LINQ 继承 "Down-Cast"新属性

转载 作者:行者123 更新时间:2023-11-30 21:10:55 27 4
gpt4 key购买 nike

我有以下两个类:

public class Base
{
public int Id { get; set; }
public string PropertyA { get; set; }
}

[NotMapped]
public class Derived : Base
{
public string PropertyB { get; set; }
}

我有以下查询:

var baseQ = from b in db.Bases
let propertyB = SomeCalculation()
select new { Base = b, PropertyB = propertyB };

这按原样工作。我想要的是这样的东西(伪代码):

List<Derived> list =  (from b in db.Bases
let propertyB = SomeCalculation()
select new { Base = b, PropertyB = propertyB }).ToList();

是否可以将选择“向下转换”到派生类,或者我是否必须为派生类编写一个构造函数,看起来像这样:

public Derived(Base b, string b) { ... }

我的最终解决方案:我将派生类更改为以下内容(因为您甚至不能在对象初始值设定项中使用 string.Format):

public class Derived
{
public Base Base { get; set; }
public string PropertyB { get; set; }

public string CalculatedProperty { get { ... } }//For string.Format and other stuff
}

我正在按如下方式进行分配:

List<Derived> list =  (from b in db.Bases
let propertyB = SomeCalculation()
select new Derived { Base = b, PropertyB = propertyB }).ToList();

最佳答案

在这种情况下您不能转换,因为您的查询返回的是匿名类型。相反,您可以使用对象初始值设定项将属性设置为 Derived 类:

List<Derived> list = (from b in db.Bases
let propertyB = SomeCalculation()
select new Derived
{
Id = b.Id,
PropertyA = b.PropertyA,
PropertyB = propertyB
}).ToList();

如果您有大量属性,您可以采用您建议的方法,或添加包含您的属性的数据传输对象 (DTO),然后使用 AutoMapper 等库为您执行映射。

关于c# - LINQ 继承 "Down-Cast"新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8228942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com