2011-06-29 15 views
3

我有以下的存儲庫,包括三種方法返回我的db對象,前兩個查詢工作正常,因爲他們simly返回一個數據列表,但作爲thrird方法需要從這兩個表都與如何做到這一點有點混淆。LINQ幫助初學者選擇多個表

任何人都可以友好地指出我在正確的方向,因爲如何編寫一個LINQ查詢來從兩個相關表中選擇要傳遞到下面顯示的存儲庫中的最後一個方法(CustomerAndSites) - 這些表與客戶ID字段,

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using CustomerDatabase.Domain.Abstract; 
using CustomerDatabase.Domain.Concrete; 
using CustomerDatabase.Domain.Entities; 
using System.Data.Linq.Mapping; 
using System.Data.Linq; 
using System.Web.Mvc; 

namespace CustomerDatabase.Domain.Concrete 
{ 
class SqlCustomersAndSitesRepository : ICustomersAndSitesRepository 
{ 
    public Table<CustomerSite> customerSitesTable; 
    public Table<Customer> customerTable;        


    public SqlCustomersAndSitesRepository(string connectionString) 
    { 
     customerSitesTable = (new DataContext(connectionString)).GetTable<CustomerSite>(); 
     customerTable = (new DataContext(connectionString)).GetTable<Customer>(); 
    } 

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

    public IQueryable<Customer> Customers 
    { 
     get { return customerTable; } 
    } 

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

} 

}

====更新

這是我ICustomersAndSitesM界面,我在哪裏可以定義CustomersAndSitesMix,我需要創建一個單獨的實體?我在我的UI項目中有一個包含兩個對象屬性的視圖模型。

using System; using System.Collections.Generic;使用System.Linq的 ; using System.Text;使用CustomerDatabase.Domain.Entities的 ;

命名空間CustomerDatabase.Domain.Abstract { 接口ICustomersAndSitesM { IQueryable的客戶{獲得; } IQueryable CustomerSites {get; }}

}

+0

你爲什麼要返回一個IQueryable的ICustomersAndSitesRepository?它對我沒有任何意義 – Chandu

+0

你在構造函數中做什麼? !你運行/測試過這些代碼嗎? – Nix

回答

0

如果你的兩個表實際上是正確使用外鍵鏈接,LINQ將拉子記錄,以及當你在父記錄拉。您需要檢查您的DataContext在調試時返回的模型,並且應該能夠通過足夠的挖掘查看任何鏈接的記錄。例如,如果您的站點鏈接到客戶,則在您的客戶域模型結果中,您應該看到一個名爲「站點」的字段,該字段是鏈接到該客戶的站點域模型的列表。

+0

感謝您的建議,我的表通過外鍵鏈接,但我可以從模型中訪問這兩個對象的唯一方法是使用包含兩個對象屬性的視圖模型,我是否需要用任何東西來裝飾實體定義外鍵關係? – Liam

+0

如果它已經在您的數據庫中表示過,則不需要。當您在模型設計器窗口中拖動表格時,如果您看到兩個表格之間的關係線,那麼您應該很好......等等......您是否在使用Entitity Framework?我正在描述它如何與LINQ to SQL一起工作。我沒有EF的經驗。如果你在搖擺EF,我的建議可能是moonman語言。 – Mobius

0

而不是返回'ICustomersAndSitesRepository',我想你實際上想要一個'CustomersAndSitesMix'。如果是這樣,你可以這樣做:

public IQueryable<ICustomersAndSitesM> CustomerAndSites 
{ 
    get 
    { 
     return from customer in customerTable 
       join site in customerSitesTable 
        on customer.PLACEKEYHERE equals site.PLACEKEYHERE 
       select new CustomersAndSitesMix(customer, site); 
    } 
} 
+0

您會明白「CustomersAndSitesMix」只是包含來自兩個類的信息混合的任何對象,並且具有將這兩個類作爲參數的構造方法。 – Tipx

+0

感謝您的幫助,即時通訊猜測ICustomerAndSitesM與我所謂的ICustomersAndSitesRepository類似,這只是兩個實體的信息(IVE更新了問題以顯示ICustomerAndSitesM。不確定在哪裏設置CustomersAndSitesMix,是否需要在界面中定義ICustomerAndSitesM? – Liam