0

.Join()このメソッドを LINQ で使用して、次の SQL を実行したいと考えています。

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

AccountNumおよびに使用されるパラメーターはLineNumber、メソッドに動的に渡されます。

.Join()これを転送して LINQメソッドを使用するにはどうすればよいですか?

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);
}
4

2 に答える 2

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 to Objectsに違いが生じますが、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 };
于 2012-06-27T14:37:18.500 に答える