2014-01-10 3 views
1

У меня есть функция, которая создает запрос hql и динамически добавляет оператор order by, а затем выполняет запрос. Запрос возвращает правильные результаты, но они не находятся в порядке, установленном порядком.hql order, возвращая неправильный заказ

public List<Event> Search(string sortby) 
{ 
    string query = "from Event e and e.IsDeleted = 0 "; 

    if (sortby != null && sortby != "") 
    { 
     var useDesc = sortby.EndsWith("Desc"); 

     var name = useDesc 
      ? sortby.Remove(sortby.Length - 4, 4) 
      : sortby; 

     switch (name) 
     { 
      case "Name": 
       query = query + " order by e.Name "; 
       break; 
      case "DateCreated": 
       query = query + " order by e.CreatedOn "; 
       break; 
      default: 
       break; 
     } 

     query = useDesc ? query + " desc" : query + " asc"; 
    } 

    var HqlQuery = session.CreateQuery(query); 

    IList<Event> events = HqlQuery.List<Event>().ToList(); 

    return events; 
} 

Почему это неверный заказ.

ответ

1

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

Во-первых, этот запрос должен быть:

// the 'and' is weird 
// string query = "from Event e and e.IsDeleted = 0 "; 
// should be 
string query = "from Event e WHERE e.IsDeleted = 0 "; 

Во-вторых, HQL идет о свойствах C# (не столбцов). Итак, что кажется запутанным для меня здесь является строка/названия несогласованность

// here we get from upper layers the string 'DateCreated' 
case "DateCreated": 
    // while here we do order over the 'CreatedOn' 
    query = query + " order by e.CreatedOn "; 

Эти подсказки, которые можно было увидеть без получения более подробной информации

(I означают: HQL в NHibernate общее работает правильно . Предложение OrderBy выполняется, как ожидалось)

Смежные вопросы