我有3個實體:RatedPrice,DailyPrice和UtilizePrice。
每個實體都有代碼成員。爲實現相同接口的三個不同實體制作聯盟
我想寫一個lambda查詢,返回三個按代碼成員排序的IQueryable。我知道我需要在Union的某個地方使用,但我不知道如何。此外,所有3個實體都有差異,但實現IPrice。
我該如何做查詢?
我有3個實體:RatedPrice,DailyPrice和UtilizePrice。
每個實體都有代碼成員。爲實現相同接口的三個不同實體制作聯盟
我想寫一個lambda查詢,返回三個按代碼成員排序的IQueryable。我知道我需要在Union的某個地方使用,但我不知道如何。此外,所有3個實體都有差異,但實現IPrice。
我該如何做查詢?
您必須使用這樣的事情:
var data = ctx.RatedPrices.Select(p => new { p.Code, p.Price })
.Concat(ctx.DailyPrices.Select(p => new { p.Code, p.Price })
.Contact(ctx.UtilizePrices.Select(p => new { p.Code, p.Price }))
.OrderBy(p => p.Code);
實體框架和LINQ到實體不知道什麼是接口。你必須使用投影到一些沒有映射的類型(在這個例子中是匿名的)並處理結果。由於您不使用某個基地的實體繼承Price
(否則您不需要這樣),因此您不能指望EF會在單個結果集中返回RetedPrice
,DailyPrice
和UtilizePrice
的實例。
像這樣的事情也許
var list = listRatedPrice.Cast<IPrice>()
.Concat(listDailyPrice.Cast<IPrice>()
.Concat(listUtilizePrice.Cast<IPrice>))).Orderby(p => p.Code);
已使用EF將您的類映射爲層次結構?那麼英孚將照顧加入 – Eranga 2011-06-05 13:30:34
@Eranga:我如何映射它們? – Naor 2011-06-05 13:40:45
檢查這篇文章http://prashantbrall.wordpress.com/2011/04/06/ef-code-first-table-per-type/ – Eranga 2011-06-05 13:48:30