2016-09-30 69 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 ... 
    }