2011-04-11 58 views
12

我無法弄清楚linq實體查詢語法。我的問題是,如果Calls表的值爲null,那麼注意到了,我想讓左連接類似於Calls表中的'all'行。左加入Linq到實體的Vb.net

我試圖對它進行分組,但我無法弄清楚它的正確寫法。

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} 

我該如何解決呢?

+0

你能解釋這些數據,您希望看到使用組結果? – Jeremy 2011-04-12 02:07:30

+0

如果你創建Dummy類,你可以在LINQPad中測試你的LINQ http://www.linqpad.net/ – Jeremy 2011-04-12 04:14:45

回答

30

類似的問題:Linq to Sql: Multiple left outer joins

微軟文檔:從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中,我們可以用我們

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