создание союза для трех разных сущностей, который реализует один и тот же интерфейс - PullRequest
1 голос
/ 05 июня 2011

У меня есть 3 объекта: RatedPrice, DailyPrice и UtilizePrice.
Каждый объект имеет член кода.

Я хотел бы написать лямбда-запрос, который возвращает IQueryable из трех, отсортированных по элементу кода. Я знаю, что мне нужно использовать где-нибудь в Союзе, но я не знаю как. Более того, все 3 объекта имеют различия, но являются инструментами IPrice.

Как мне сделать запрос?

Ответы [ 2 ]

0 голосов
/ 05 июня 2011

Вы должны использовать что-то вроде этого:

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-to-entity не знают, что такое интерфейс.Вы должны использовать проекцию на некоторый не сопоставленный тип (анонимный в примере) и иметь дело с результатом.Поскольку вы не используете наследование сущностей от некоторого базового Price (в противном случае вам это не понадобится), вы не можете ожидать, что EF вернет вам экземпляры RetedPrice, DailyPrice и UtilizePrice в одном наборе результатов.

0 голосов
/ 05 июня 2011

Примерно так может быть

var list = listRatedPrice.Cast<IPrice>()
.Concat(listDailyPrice.Cast<IPrice>()
.Concat(listUtilizePrice.Cast<IPrice>))).Orderby(p => p.Code);
...