2012-06-27 54 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支持。 我不知道第四个参数是如何工作的,但它确实如此。