2014-01-30 48 views
0

我有多个OrderBy但只有第一顺序列正在多个LINQ排序依据不工作

public static List<vwData> GetAllData(string startDate, string endDate) 
{ 
    DateTime dtStart = Convert.ToDateTime(startDate).Date; 
    DateTime dtEndDate = Convert.ToDateTime(endDate).Date; 


    var entities = new DataEntities(); 
    var query = from c in entities.vwData 
       let eventDate = EntityFunctions.TruncateTime(c.EventCreateDate) 
       orderby c.EventCreateDate ascending, c.StartDateTime ascending 
       where eventDate >= dtStart && eventDate <= dtEndDate 
       select c; 
    return query.ToList(); 
} 
+0

你能提供样品输入数据和预期的输出吗? – Grundy

+0

您的代码似乎确定,为什么您认为只有第一个订单正在工作? – Grundy

回答

0

排序依据应该是条件检查和默认排序是升序

var query = from c in entities.vwData 
      let eventDate = EntityFunctions.TruncateTime(c.EventCreateDate) 
      where eventDate >= dtStart && eventDate <= dtEndDate 
      orderby c.EventCreateDate, c.StartDateTime 
      select c; 
return query.ToList(); 

OR

后使用Linq,我们可以做如下

var query = entities.vwData.Where(i => 
{ 
    var eventDate = EntityFunctions.TruncateTime(i.EventCreateDate); 
    if (eventDate >= dtStart && eventDate <= dtEndDate) 
     return true; 

    return false; 
}) 
.OrderBy(j => j.EventCreateDate) 
.ThenBy(k => k.StartDateTime) 
.Select(m => m); 

return query.ToList(); 
+0

查询表达式语法不包含'thenby'子句 – Grundy

+0

@Grundy:你说得对。感谢您指点。 –

+0

嗨Siva,我有一个错误,当我使用你的linq解决方案时,它表示带有语句正文的lambda表达式不能转换为表达式树 – Supermode

0

考虑使用ThenBy

public static List<vwData> GetAllData(string startDate, string endDate) 
{ 
    DateTime dtStart = Convert.ToDateTime(startDate).Date; 
    DateTime dtEndDate = Convert.ToDateTime(endDate).Date; 


    var entities = new DataEntities(); 
    var query = from c in entities.vwData 
      let eventDate = EntityFunctions.TruncateTime(c.EventCreateDate) 
      orderby c.EventCreateDate ascending 
      thenby c.StartDateTime ascending 
      where eventDate >= dtStart && eventDate <= dtEndDate 
      select c; 
    return query.ToList(); 
} 
+0

查询表达式语法不包含'thenby'子句 – Grundy

0

尝试下面的查询。它会帮助你:

var query = entities.vwData.Where(i => EntityFunctions.TruncateTime(i.OrderDate) >= dtStart && EntityFunctions.TruncateTime(i.OrderDate) <= dtEndDate) 
     .OrderBy(j => j.EventCreateDate) 
     .ThenBy(k => k.StartDateTime) 
     .Select(m => m); 

    return query.ToList(); 
+0

仍然没有排序第二个顺序 – Supermode

+0

奇怪。同样的查询正在为我工​​作的葡萄酒。 – nitish