我有以下兩類:LINQ繼承「向下轉換」與新的物業
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
}
而且我做的assignement如下:
List<Derived> list = (from b in db.Bases
let propertyB = SomeCalculation()
select new Derived { Base = b, PropertyB = propertyB }).ToList();
假設'db'是一個datacontext,這會拋出舊的'Can not constructor a'Derived',因爲這是一個非標量類型的錯誤。在執行選擇之前,您需要檢索「基礎」到集合。 –
就我而言,DB是一個DbContext。 所以,這是行得通的。我將爲我的課程配置一個構造函數。對於這種簡單的情況,DTO似乎太多了。 :) – Shion
@Kirk:你說得對!這不起作用。我以某種方式重讀了部分答案。那麼這種對象初始值設定器的方式呢? :) – Shion