Как я могу правильно применять дженерики C # в этом случае, имея дело с платформой Entity и методами действий MVC - PullRequest
0 голосов
/ 03 марта 2012

Возможно ли как-то использовать дженерики в этом случае или, возможно, есть более подходящий метод структуры сущностей, например .set<Type EntityType>.Я хочу выполнить одну и ту же операцию LinQ, но на разных наборах сущностей сущностей, скажем, вместо репозитория. PCBuilds Я хочу выполнить операцию над хранилищем. Дома и т. Д., Имя сущности, над которой будет выполняться операция LinQ, будет определятьсязначение родительского параметра.Мне также нужно будет вернуть конкретное представление, относящееся к значению категории.

Я мог бы использовать переключение регистра, но мне просто интересно, смогу ли я принять более общий и гибкий код.Или я должен просто создать отдельные методы действий для возврата типов сущностей и создать соответствующие записи маршрутизации.

public PartialViewResult StoreContent(string Parent = "PCBuild" ,string category = "Desktop", int page = 1)
    {


        int pagesize = 3;

        PagingStore IndexModel = new PagingStore()
        {
            PCBuilds = repository.PCBuilds.Where(x => x.ExternalCat.CatName == category).OrderBy(x => x.BDetails.Where(c => c.IsSelected == true).Select(c => c.Product.ListPrice).Sum()).Skip((page - 1) * pagesize).Take(pagesize).ToList(),
            category = category,
            PagingInfo = new PagingInfo()
            {
                CurrentPage = page,
                ItemsPerPage = pagesize,
                TotalItems = repository.PCBuilds.Where(x => x.ExternalCat.CatName == category).Count(),
            }

        };


        return PartialView(IndexModel);
    }

1 Ответ

0 голосов
/ 05 марта 2012

Если у PCBUild и Home есть ExternalCat и BDetails и Product, то вы можете сделать это

public interface IProductDescription {
    Category ExternalCat { get; }
    IQueryable<Option> BDetails { get; }
}

public partial class PCBuild : IProductDescription {
}

public partial class Home : IProductDescription {
}

и измените определение метода на:

IQueryable<IProductDescription> GetProductDescriptions(string setName) {
        switch(setName) {
            case "PCBuild": 
                return this.PCBuilds;
            case "Home":
                return this.Homes;
            ...
        }
    }
}

И просто используйте это так: ...

 PCBuilds = repository.GetProductDescriptions(setName)
                      .Where(x => x.ExternalCat.CatName == category)
                      .OrderBy(
                          x => x.BDetails
                                .Where(c => c.IsSelected == true)
                                .Select(c => c.Product.ListPrice)
                                .Sum())
                      .Skip((page - 1) * pagesize)
                      .Take(pagesize)
                      .ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...