Подтвердить что ты не робот

Left Join Linq to Entity Vb.net

Я не могу понять, что linq для синтаксиса запроса сущности. Моя проблема заключается в том, что если значение таблицы "Вызовы" равно null, то заметка появляется, я хочу сделать что-то вроде левого соединения, чтобы получить "все" строки из таблицы "Вызовы".

Я попытался сгруппировать его, но я не могу понять, как правильно его написать.

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}

Как я могу это исправить?

4b9b3361

Ответ 1

Аналогичный вопрос: Linq to Sql: множественные левые внешние соединения

Документация Microsoft: http://msdn.microsoft.com/en-us/library/bb918093.aspx#Y916

LINQ Примеры из: http://msdn.microsoft.com/en-us/vbasic/bb737909

Левая внешняя ссылка Так называемое внешнее объединение может быть выражено объединением групп. Левое внешнее соединение подобно крестному соединению, за исключением того, что все элементы левой стороны включаются хотя бы один раз, даже если они не соответствуют элементам правой стороны. Обратите внимание, что овощи появляются на выходе, даже если у него нет подходящих продуктов.

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

Для левого соединения в VB.net мы можем использовать Let

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)

После левого соединения мы можем использовать группу

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