ASP.net MVC.2 как определить коллекцию нескольких типов в интерфейсе хранилища - PullRequest
1 голос
/ 28 июня 2011

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

Есть ли определить коллекцию нескольких типов в интерфейсе?Для одного типа я использовал это в интерфейсе,

    IQueryable<CustomerSite> CustomerSites { get; }

, тогда у меня есть мой запрос linq в хранилище

public IQueryable<CustomerSite> CustomerSites
    {
        get { return customerSitesTable; }
    }

Однако, так как этот новый запрос будет содержать 2 типа, обаклиенты и сайты клиентов, как эта коллекция должна быть определена в интерфейсе?

====== ОБНОВЛЕНИЕ

Я попытался использовать .Include (это выдает ошибку о том, что естьнет определения для включения в сущность Customer, не уверен, что для этого им не хватает пространства имен?)

Я также пытался создать пользовательский интерфейс,

public interface ICustomersAndSitesRepository
{
    IQueryable<CustomerSite> CustomerSites { get; }
    IQueryable<Customer> Customers { get; }
    IQueryable<ICustomersAndSitesRepository> CustomerAndSites { get; }
}

И этот метод вхранилище

public IQueryable <ICustomersAndSitesRepository> CustomerAndSites
    {
        get { return CustomerAndSites; }
    }

Однако, когда я пытаюсь передать коллекцию представлению в контроллере, например,

public ViewResult List([DefaultValue(1)] int page)
    {

        var customersWithSitesToShow = customersAndSitesRepository.CustomerAndSites;
        var viewModel = new CustomerSitesListViewModel
        {                
            Customers = customersWithSitesToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = customersWithSitesToShow.Count()
            }
        };

        return View(viewModel);  //Passed to view as ViewData.Model (or simply model)
    }

, я получаю ошибку преобразования при преобразовании хранилища в модель представления

Cannot implicitly convert type  'System.Collections.Generic.List<CustomerDatabase.Domain.Abstract.ICustomersAndSitesRepository>' to 'System.Collections.Generic.IEnumerable<CustomerDatabase.WebUI.Models.CustomerViewModel>'. An explicit conversion exists (are you missing a cast?)  

Я определяю модель представления как

public IEnumerable Customers {get;задавать;}

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

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

Если предположить, что у Customer есть много CustomerSite, то вы вернете IQueryable<Customer>, но с помощью .Include вернете CustomerSites в каждом Customer.

, например

public IQueryable<Customer> GetCustomersAndSites()
{
    return MyEntities.Customers.Include("CustomerSite");
}
0 голосов
/ 28 июня 2011

Как насчет возврата пользовательского интерфейса IQuerable, содержащего свойства для каждой требуемой коллекции?

public interface ICustomersAndSites
{
  IQueryable<CustomerSite> CustomerSites{get;}
  IQueryable<Customers> Customers{get;}
}

Затем вы можете установить это в своем хранилище:

public IQueryable<ICustomersAndSites> CustomerAndSites
    {
        get { return combinationObject; }
    }
...