2013-04-08 18 views
9

muszę napisać stan Linq podmiotu, który może otrzymać zapytanie SQL poniżejLINQ do jednostki Dołącz tabelę z wielokrotnych lub warunków

SELECT RR.OrderId 
FROM dbo.TableOne RR 
     JOIN dbo.TableTwo M ON RR.OrderedProductId = M.ProductID OR RR.SoldProductId= M.ProductID 
WHERE RR.StatusID IN (1, 4, 5, 6, 7) 

siedzę z poniższej składni

int[] statusIds = new int[] { 1, 4, 5, 6, 7 }; 
      using (Entities context = new Entities()) 
      { 
       var query = (from RR in context.TableOne 
          join M in context.TableTwo on new { RR.OrderedProductId, RR.SoldProductId} equals new { M.ProductID } 
          where RR.CustomerID == CustomerID 
          && statusIds.Any(x => x.Equals(RR.StatusID.Value)) 
          select RR.OrderId).ToArray(); 
      } 

ten daje mi poniżej błąd

Błąd 50 Typ jednego z wyrażeń w klauzuli join jest niepoprawny. Wnioskowanie typu nie powiodło się w wywołaniu "Dołącz".

W jaki sposób mogę wykonać wiele połączeń warunkowych dla tabeli.

Odpowiedz

21

Nie musisz używać składni sprzężenia. Dodawanie predykaty w where klauzula ma taki sam efekt można dodać kolejne warunki:

var query = (from RR in context.TableOne 
      from M in context.TableTwo 
      where RR.OrderedProductId == M.ProductID 
        || RR.SoldProductId == M.ProductID // Your join 
      where RR.CustomerID == CustomerID 
        && statusIds.Any(x => x.Equals(RR.StatusID.Value)) 
      select RR.OrderId).ToArray(); 
+0

To zadziałało. Szukałem SO i znalazłem coś takiego, gdzie RR.OrderedProductId/RR.SoldProductId równa się M.ProductID, ale to nie zadziałało dla mojego kodu. – HaBo

7

zmienić składnię zapytań z wykorzystaniem join użyciem dodatkowego from klauzuli

var query = (from RR in context.TableOne 
       from M in context.TableTwo.Where(x => x.ProductID == RR.OrderedProductId || x.ProductID == RR.SoldProductId) 
       where statusIds.Any(x => x.Equals(RR.StatusID.Value)) 
       select RR.OrderId).ToArray(); 
+0

Twoje obie odpowiedzi sprawdziły się u mnie. Przepraszam, mogę wybrać tylko jedną odpowiedź. Tak więc oddaję głos i wybieram @gert Arnold jako odpowiedź – HaBo

2

Multiple dołącza:

var query = (from RR in context.TableOne 
      join M in context.TableTwo on new { oId = RR.OrderedProductId, sId = RR.SoldProductId} equals new { oId = M.ProductID, sId = M.ProductID } 
      where RR.CustomerID == CustomerID 
      && statusIds.Any(x => x.Equals(RR.StatusID.Value)) 
      select RR.OrderId).ToArray(); 
Powiązane problemy