2012-06-19 248 views
1

我有兩個表,一個有450行,另一個是一個排序表,將有很多比這少。我希望能夠通過使用左連接對錶的集合進行排序,並且希望第二個表中的項目由名爲「SortOrder」的Int列進行排序。像這樣:Linq To SQL DefaultIfEmpty

var g_getFragments = (from c in context.Fragments 
              join fso in context.FragmentSortOrders 
              on c.ID equals fso.ID into sr 
              from x in sr.DefaultIfEmpty() 
             select new { c.ID_Section, c.ID, c.Title, c.IsManagementFragment, SortOrder = x.SortOrder ?? Int32.MaxValue}) 
             .OrderBy(o => o.SortOrder) 
             .OrderBy(f => f.Title) 
             .ToList(); 

這會按預期返回所有450行,但我的順序不正確。我想要第二個表中SortOrder值的順序是第一個,如果它是null,那麼將它設置爲Int32.MaxValue,這樣它將是最後一個。因此,如果第一個表中第一個表中有1個項目,第二個表格中的SortOrder值爲1,則它應該在列表中第一個,但它不是。不過,它按標題排序。

我在這裏做錯了什麼?

回答

3

將您的第二個OrderBy更改爲ThenBy