Объединение IQueryables производных типовC#

Место общения программистов C#
Ответить
Гость
 Объединение IQueryables производных типов

Сообщение Гость »


У меня есть три типа, производные от одного базового класса: BaseEvent.
Я отображаю все три типа вместе в сетке данных в своем интерфейсе. Необходимо сохранять информацию о том, какого типа каждый элемент, чтобы я мог привести его к соответствующему типу при обработке во внешнем интерфейсе.
Я работал, преобразовывая каждый набор в список, но мне бы хотелось вместо этого вернуть IQueryable, чтобы его можно было более эффективно фильтровать.

Код: Выделить всё

public override IQueryable GetAllItems()
{

var freestyleEvents = _context.Set()
.Include(ev => ev.Venue)
.Include(ev => ev.EventImage)
.Include(ev => ev.BookingOption)
.Include(ev => ev.Business)
.Include(ev => ev.Tickets!).ThenInclude(ticket => ticket.TicketOption);

var workshopEvents = _context.Set()
.Include(ev => ev.Venue)
.Include(ev => ev.EventImage)
.Include(ev => ev.BookingOption)
.Include(ev => ev.Business)
.Include(ev => ev.Tickets!).ThenInclude(ticket => ticket.TicketOption);

var classNightEvents = _context.Set()
.Include(ev => ev.Venue)
.Include(ev => ev.EventImage)
.Include(ev => ev.BookingOption)
.Include(ev => ev.Business)
.Include(ev => ev.Tickets!).ThenInclude(ticket => ticket.TicketOption);

return freestyleEvents.OfType().Concat(workshopEvents.OfType()).Concat(classNightEvents.OfType());

}
Это возвращает ошибку времени выполнения.

Выражение типа 'System.Linq.IQueryable

Код: Выделить всё

1[BaseEvent.Model.Freestyle]' cannot be used for parameter of type 'System.Linq.IQueryable
1[BaseEvent.Model.Workshop]» метода «System.Linq.IQueryable»

Код: Выделить всё

1[BaseEvent.Model.Workshop] Concat[Workshop](System.Linq.IQueryable
1[BaseEvent.Model.Workshop], System.Collections.Generic.IEnumerable`1[BaseEvent.Model.Workshop])'

How can I write this so it works?


Источник: https://stackoverflow.com/questions/781 ... ived-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»