2011-06-28 14 views
1

我試圖將列表返回到包含來自兩個表中的數據的顯示模板,我正在使用存儲庫模式,並使用視圖模型來傳遞數據從LINQ查詢返回兩個對象的視圖ASP.net MVC.2如何在存儲庫接口中定義多個類型的集合

是否有定義接口中多種類型的集合? 對於單一類型的我已經在接口中使用此,

IQueryable<CustomerSite> CustomerSites { get; } 

的話,我有我的LINQ查詢在倉庫中

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

不過,由於這個新查詢將包含2種類型,客戶和客戶網站,這個集合應該如何在界面中定義?

====== UPDATE

我已經使用在.include(這將引發一個錯誤,指出沒有定義包括在客戶實體,不知道我在想念這個名稱空間的嘗試?)

我也嘗試創建一個自定義的界面,

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) 
    } 

我得到一個轉換錯誤重新convreting的repostiory向視圖模型

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;組; }

任何人都可以指出我在正確的方向嗎?

回答

0

假設一個Customer有許多CustomerSite,那麼你會返回一個IQueryable<Customer>但使用.Include每個Customer內歸還CustomerSites

例如

public IQueryable<Customer> GetCustomersAndSites() 
{ 
    return MyEntities.Customers.Include("CustomerSite"); 
} 
+0

謝謝我試圖實現這一點,但.Include拋出一個錯誤,指出它在客戶實體中沒有定義,是否有一個命名空間需要的.Include工作? – Liam

+0

@Liam,你只需要添加'使用System.Linq;'或者'使用System.Data.Entity'。但是,請確保您正確拼寫Include實體,因爲這是EDMX中顯示的關係而不是表名。如果這是一個多對多的關係,那麼它可能是CustomerSites。 –

+0

@Liam,還要確保你的'web.config'中的實體的連接字符串中指定了'MultipleActiveResultSets = True'。 –

0

如何返回包含您需要的每個集合的屬性的IQuerable自定義接口?

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

然後,您可以設置這在你的資料庫:

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

謝謝感謝您的建議,即時嘗試執行此,但不能得到它的工作,我已經更新了這個問題。 – Liam

相關問題