2014-01-30 3 views
0

У меня есть несколько OrderBy, но только первый столбец заказ работаетмножественный LINQ не OrderBy работает

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

OrderBy должен быть после того, как проверка состояния и упорядочение по умолчанию по возрастанию

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

ИЛИ

Используя 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

привет Шива, у меня есть ошибка, когда я использую ваше решение linq, он сказал, что выражение лямбда с телом оператора не может быть преобразовано в дерево выражений – 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