Итак, вот сценарий ... Мой сайт отображает три различных типа продуктов для продажи. Для этого примера мы назовем их Мебель, Одежда и Игрушки. Три продукта явно различаются, но все они имеют одни и те же свойства (цена, дата создания, описание, краткое описание и т. Д.).
Я использую EF4, поэтому, когда я отображаю список продуктов на странице «Мебель», я могу просто сделать что-то вроде этого:
IEnumerable<Furniture> furniture = Repository.GetFurniture();
Все работает отлично, когда на странице отображается только один тип продукта. У меня есть весь набор мебели, отображаемый в постраничном списке из 10 продуктов на странице, сортируемый по имени, цене, дате объявления и т. Д.
Однако я хочу создать ссылку на "Просмотреть все товары этого продавца". Эта страница должна отображать ВСЕ, что продавец перечислил, независимо от того, мебель это, одежда или игрушки. Хитрость в том, что он также должен быть отсортирован по полям, которые разделяют все продукты (цена, название, дата объявления и т. Д.)
Так что я хотел бы сделать что-то вроде этого псевдокода:
IEnumerable<IProduct> products =
Repository.GetAllProducts(sellerId).OrderBy(sortField).Skip(skip).Take(take);
Затем в представлении (да, я ссылаюсь на сущности EF4 в представлении):
@foreach (var product in Model.products.OrderBy(sortField))
{
if (product is Furniture)
{
Html.RenderPartial("FurnitureResult", (Furniture)product)
}
else if (product is Clothes)
{
Html.RenderPartial("ClothesResult", (Clothes)product)
}
// repeat for toys
}
Итак, мой вопрос:
Как будет выглядеть вызов Repository.GetAllProducts (sellerId)? Это должен быть набор запросов LINQ, который получает всю мебель, одежду и игрушки и объединяет их в один IEnumerable <>. Если это невозможно, какие еще методы я могу использовать, чтобы получить список таких продуктов?
По сути, мне просто нужно знать, какой лучший способ состоит в том, чтобы сгруппировать набор несвязанных объектов с некоторыми общими свойствами в одну коллекцию, а затем отсортировать этот список по одному из общих свойств и затем определить, какой это конкретный класс, как я перебирать их.
Спасибо!