2009-09-08 102 views
4

我使用C#.NET和LINQLINQ連接很多 - 很多關係

在我的LINQ模型我有三個數據庫表:

LINQ MODEL http://img180.imageshack.us/img180/9827/linqmodel.jpg

下面的代碼是我如何訪問數據:

public IQueryable<tblAvailability> GetAvailabilitiesBySet(int id) 
    { 
     return (from a in dc.tblAvailabilities 
       where a.asID == id 
       select a).DefaultIfEmpty(); 
    } 

我顯示數據到屏幕(通過中繼器)。但是我似乎無法訪問位於tblAppointmentType中的'appTypeName'。我以爲我可以這樣訪問它:

<%#Eval("tblAvailabilities.tblAvailabilityAppointmentType.tblAppointmentType.appTypeName")%> 

但它不會讓我訪問tblAppointmentType。我究竟做錯了什麼?

感謝

克萊爾

+1

請提供確切的錯誤信息。從你的數據模型和代碼中,我不知道它可能是你暗示的內容。我寧願期待它抱怨'tblAvailabilities'。 – 2009-09-08 16:12:45

回答

0

我在第一個轉發器中增加了另一個轉發器,並訪問了正確的數據庫表。

0

你沒有加入任何其他表的,因此結果只帶回tblAvailabilities行。

var query = (from avail in dc.tblAvailabilitities 
     join aaTyp in dc.tblAvailabilityAppointmentType 
      on avail.availabilityID == aaType.availabilityID 
     join appType in dc.tblAppointmentType 
      on aaType.appTypeID == appType.appTypeID 
     select new { TypeName = appType.appTypeName }); 
0

對於您當前的模式,您可能會爲tblAvailabilities中的每條記錄的tblAvailabilityAppointmentType使用多個記錄。這意味着在試圖綁定到tblAppointmentType之前,您需要獲取特定條目。另外,你不加入其他表來檢索行(如果你想這樣做)。

順便說一句,真的很多很多,你想在這裏?你的用法(以及我從你的命名推斷出的概念)使你看起來像是一對多的關係。也許很多tblAvailabiliy記錄,每個記錄都引用一個tblAppointmentType?

如果您確實需要多對多,您可以很好地服務於使用GetAppointmentTypes()方法擴展tblAvailabilities類。這裏是a decent article on codeproject

Othewise,請確保您的其他表中加入和引用tblAppointmentType右排

+0

每個可用性可以有多個AppointmentTypes – ClareBear 2009-09-09 07:51:24

3

LINQ2SQL不處理許多-2-許多良好,沒有一點手把手...

刪除tblAvailabiltyAppointmentType和tblAppoitmentType之間的鏈接。建立從tblAvailabiltyAppointmentType到tblAppoitmentType的新鏈接。點擊該新鏈接即可訪問該屬性。將基數更改爲OneToOne(因爲您無法選擇ManyToOne),請打開「Cild屬性」部分,然後將名稱更改爲單數。

現在,當你執行你的問題有查詢時,tblAvailability對象將有一個集合tblAvailabilityAppointmentTypes,而集合中的每個tblAvailabilityAppointmentType對象有一個屬性對象tblAppointmentType,裏面有你要找的appTypeName場。

var appTypes = GetAvailabilitiesBySet(99).tblAvailabilityAppointmentTypes. 
    Select(a=>a.appTypeName);