2011-04-11 14 views
12

Nie mogę zrozumieć, że linq do składni zapytania jednostki. Mój problem polega na tym, że jeśli wartość tabeli połączeń jest zerowa, to pojawia się notacja, chcę zrobić coś w rodzaju lewego sprzężenia, aby uzyskać "wszystkie" wiersze z tabeli Połączeń.Po lewej Dołącz Linq do Vr.net Entity

Próbowałem go pogrupować, ale nie mogę znaleźć prawidłowego zapisu.

Dim TicketQuery As ObjectQuery = From c In EnData.Customer _ 
             Join t In EnData.Calls On t.CustomerID Equals c.CustomerID _ 
             Join Status In EnData.Lists On t.Status Equals Status.ListValue _ 
             Join Project In EnData.Lists On t.Project Equals Project.ListValue _ 
             Join Priorty In EnData.Lists On t.Priority Equals Priorty.ListValue _ 
             Where c.Status > -1 And t.Status > -1 And Status.ListType = 1 And Project.ListType = 3 And Priorty.ListType = 2 _ 
     Select New With {c.CustName, t.CallID, t.CallDate, t.CallTime, t.Description, Key .Status = Status.ListText, Key .Project = Project.ListText, t.DateModified, Key .Priority = Priorty.ListText} 

Jak mogę to naprawić?

+0

można wyjaśnić dane chcesz zobaczyć, jak wynik? – Jeremy

+0

Jeśli tworzysz klasy Dummy, możesz przetestować swój LINQ w LINQPad http://www.linqpad.net/ – Jeremy

Odpowiedz

30

Podobne pytanie: Linq to Sql: Multiple left outer joins

Microsoft Dokumentacja: http://msdn.microsoft.com/en-us/library/bb918093.aspx#Y916

LINQ Przykłady z: http://msdn.microsoft.com/en-us/vbasic/bb737909

Left Outer Join tak zwane sprzężenie zewnętrzne mogą być wyrażone z grupy dołączyć. Lewy zewnętrzny łącznik przypomina krzyż, z tym wyjątkiem, że wszystkie lewe elementy boczne są uwzględniane przynajmniej raz, nawet jeśli nie pasują do żadnych elementów po prawej stronie. Zwróć uwagę, jak warzywa pojawiają się w wynikach, nawet jeśli nie ma pasujących produktów.

Public Sub Linq105() 
    Dim categories() = {"Beverages", "Condiments", "Vegetables", "Dairy Products", "Seafood"} 

Dim productList = GetProductList() 

Dim query = From c In categories _ 
      Group Join p In productList On c Equals p.Category Into Group _ 
      From p In Group.DefaultIfEmpty() _ 
      Select Category = c, ProductName = If(p Is Nothing, "(No products)", p.ProductName) 

For Each v In query 
    Console.WriteLine(v.ProductName + ": " + v.Category) 
Next 
End Sub 
2

Na lewej przyłączyć w VB.NET możemy użyć Niech

Dim q = 
    (From item In _userProfileRepository.Table 
    Let Country = (From p In _countryRepository.Table Where p.CountryId = item.CurrentLocationCountry Select p.Name).FirstOrDefault 
    Let State = (From p In _stateRepository.Table Where p.CountryId = item.CurrentLocationCountry Select p.Name).FirstOrDefault 
    Let City = (From p In _stateRepository.Table Where p.CountryId = item.CurrentLocationCountry Select p.Name).FirstOrDefault 
    Where item.UserId = item.ProfileId.ToString) 

Po lewej przyłączyć możemy użyć grupę przez

Dim q2 = 
    (From p In q Group p By p.Country, p.State, p.City Into Group 
    Select New With 
     { 
      .Country = Country, 
      .State = State, 
      .City = City, 
      .Count = Group.Count 
     }).ToList() 
Powiązane problemy