2012-06-27 49 views
0

我想使用.Join()方法在LINQ執行以下SQL:使用LINQ。加入()方法

select * from Enquiries e, QuoteLines q where e.EnquiryId = q.EnquiryId and e.AccountNum = '123' and q.LineNumber = 'ABC123'

用於AccountNumLineNumber的參數將被動態地傳遞給該方法。

我將如何傳遞這個使用LINQ .Join()方法?

public ActionResult EnquirySearch(string id) 
{ 
    var enquiries = new List<Enquiries>();  

    if(id.Contains(' ')) 
    { 
     string[] searchArr = id.Split(' '); 
     // want to do my LINQ here 
     // this will be split so the first element in the array is the AccountNum 
     // and the second element in the array is the LineNumber 
    } 
    else 
    { 
     enquiries = context.Enquiries.Where(x=>x.QuoteRef.Contains(id) 
     || x.AccountNum.Contains(id) || x.Owner.Contains(id)); 
    } 
    return View(enquiries); 
} 
+0

是否有一個外鍵關係?如果是這樣,你甚至不需要加入。 – naspinski

回答

2

它更容易表達的表達查詢時,它會像一個連接:

var query = from e in Enquiries 
      join q in QuoteLines on e.EnquiryId equals q.EnquiryId 
      where e.AccountNum == accountNum && q.LineNumber == lineNumber 
      select new { Enquiry = e, QuoteLine = q }; 

或者你可以過濾「早」 - 這將使在LINQ的差的對象,但幾乎可以肯定不會在LINQ to SQL/EF:

var query = from e in Enquiries 
      where e.AccountNum == accountNum 
      join q in QuoteLines.Where(qq => qq.LineNumber == lineNumber) 
       on e.EnquiryId equals q.EnquiryId 
      select new { Enquiry = e, QuoteLine = q }; 
+0

我只希望在我的調查表中選擇數據,這可能嗎? – CallumVass

+0

@BiffBaffBoff:當然 - 只是改變最後一行到'選擇e' –

+0

非常感謝!所以,出於好奇,是否沒有辦法使用'.Join()'LINQ方法來完成? – CallumVass

0

使用join()方法

var query = context.Enquiries.Where(e=>e.AccountNum == accountNum) 
.Join(context.QuoteLines.Where(q=>q.LineNumber==lineNumber), 
e => e.EnquiryID, q => q.EnquiryID,(e,q)=>e); 

這似乎棘手,但它確實有IntelliSense支持。 我不知道第四個參數是如何工作的,但它確實如此。