2014-01-10 121 views
1

我有一個函數創建一個hql查詢並動態地附加一個order by子句,然後執行查詢。查詢返回正確的結果,但它們不是按順序設置的順序。hql通過錯誤的順序排序

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 "; 

這些都是暗示,這可能沒有更多的細節

可以看到(我的意思是:在HQL NHibernate的是一般的正常工作。OrderBy子句按預期執行)