2014-08-27 77 views
0

我有3個表(無論是在我的OR映射模型中的對象)。我們稱它們爲TABLE1,TABLE2和TABLE3 =>實際名稱是捷克語,我認爲這會比較好。所有組合 - LINQ查詢

1)TABLE1與TABLE2具有1-N關係。 2)TABLE1與TABLE3也有1-N的關係。因此,表是這個樣子:

TABLE2 
    { 
     int ID; 
     nvarchar attributeT2; 
     int TABLE1_FK; 
    } 

    TABLE1 
    { 
     int ID; 
    } 

    TABLE3 
    { 
     int ID; 
     nvarchar attributeT3 
     int TABLE1_FK; 
    } 

現在我需要的所有組合:TABLE2記錄,其中attributeT2 ==「T2」和表3記錄,其中attributeT3 ==「T3」但是這兩個必須具有相同的TABLE1_FK( =它們必須由TABLE1記錄加入)。

因此,如果TABLE2中有2條記錄與TABLE1_FK == 1,TABLE3_FK == 1的TABLE3中有2條記錄,那麼我需要所有組合== 4對。我可以通過foreach循環來做到這一點,並在每一步查詢數據庫,但我認爲這將是非常無效的,我想知道是否有更好的方法。

我想這可能是這樣的:

var query= from x in context.TABLE2 
       where x.attributeT2 == "T2" 
       join y in context.TABLE3 on x.TABLE1_FK == y.TABLE1_FK 
       where y.attributeT3 == "T3" 
       select new WrapperClass(x,y); 

但組合是錯誤的 - 這對並不總是具有相同的TABLE1_FK。萬分感謝您的回覆。

回答

0

我沒有自己檢查,但可能值得嘗試。這樣做是爲了參加在表2中和表3 FK列和具有地方條件attibuteT3和attributeT2

var query= from x in context.TABLE2 
      join y in context.TABLE3 on x.TABLE1_FK == y.TABLE1_FK 
      where y.attributeT3 == "T3" && x.attributeT2 == "T2" 
      select new WrapperClass(x,y); 
0

我很抱歉,但2分鐘後,我會點擊提交按鈕,我想的東西,我的避風港沒有試過。

 var asdf = from x in context.TABLE1 
        join y in context.TABLE2 on x.ID equals y.TABLE1_FK 
        where y.attributeT2 == "T2" 
        join z in context.TABLE3S on x.ID equals z.TABLE1_FK 
        where z.attributeT3 == "T3" 
        select new WrapperClass(y,z); 

它工作。無論如何感謝邁克爾。