2013-04-08 10 views
9
Ben aşağıda sözdizimi

Linq Varlık birden fazla VEYA koşullarla tabloyu Üyelik

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

bu şaşırıp

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) 

aşağıda SQL sorgusu alabileceği bir Linq varlık durumunu yazmaya gerek

hata verir

Hata 50 Birleşim tümcesindeki ifadelerden birinin türü yanlış. Yazım türü, 'Katıl' seçeneğinde başarısız oldu.

Tablo için Birden çok koşul katılımını nasıl yapabilirim.

cevap

21

Katılma sözdizimini kullanmanız gerekmez. Bir where yan tümcesinde yüklemler ekleme aynı etkiye sahiptir ve daha fazla koşul ekleyebilirsiniz:

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

Bu işe yaradı. Ben SO arıyordu ve nerede RR.OrderedProductId/RR.SoldProductId eşittir M.ProductID nerede bir şey buldum ama bu benim kod için işe yaramadı. – HaBo

7
sorgu sözdizimi değiştirme

:

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(); 
+0

Her iki cevabınız da benim için çalıştı. Üzgünüm, sadece bir cevap seçebilirim. Bu yüzden size oy verdim ve cevap olarak Arnold'u seçiyorum – HaBo

2

Çoklu Katıldı ek from maddesini kullanarak join kullanarak

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();