2016-09-30 66 views
0

目前我有三個查詢是這樣的:三個查詢組合成一個外部聯接可能

var query1 = (from a in dbContext.Table1 
       where a.email == someEmail 
       select a.Table1K).ToList(); 
var query2 = (from a in dbContext.Table2 
       where a.emailAddrerss == someEmail 
       select a.Table2K).ToList(); 
var query3 = (from a in dbContext.Table3 
       where a.email == someEmail 
       select a.Table3K).ToList(); 

if (query2.Any() || query3.Any()) 
{ 
    return false; 
} 

if(query1.Count == 1) 
{ 
    var x = query1[0]; 
    // do some stuff with that x value ... 
} 

是否有例如與外部的方式連接(我不是非常好,外連接),我們可以實現這在一個查詢而不是三個查詢?

+1

那麼你實際上並沒有_joining_表,所以我不確定這是否合適。您可以將查詢2和3嵌入到_where_子句中,但在「做某些事情」之後不知道它返回的內容,很難知道這是否合適。 –

+0

@DStanley如果查詢2或3返回任何東西,這是壞的,我們只是返回false並出去 – Bohn

回答

1

我不認爲實際的加入是合適的,但你確實有改善的機會很少:

  • 不要叫上查詢2或3 ToList如果你只是想檢查任何結果:
  • 如果只想從查詢1 一個結果,稱SingleOrDefault代替

    var query1 = (from a in dbContext.Table1 
           where a.email == someEmail 
           select a.Table1K); 
    var query2 = (from a in dbContext.Table2 
           where a.emailAddrerss == someEmail 
           select a.Table2K); 
    var query3 = (from a in dbContext.Table3 
           where a.email == someEmail 
           select a.Table3K); 
    
    
    if (query2.Any() || query3.Any()) 
    { 
        return false; 
    } 
    
    var x = query1.SingleOrDefault(); 
    if(x != null) 
    { 
        // do some stuff with that x value ... 
    }