2012-06-19 252 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