2015-07-04 56 views
1

使用EF SqlQuery類參數錯誤

string sql = @" 
SELECT TOP 50 * 
FROM Log 
ORDER BY Date desc"; 
return context.Database.SqlQuery<Log>(sql).ToList(); 

的工作,但是當我試圖插入參數一樣

string sql = @" 
SELECT TOP @top * 
FROM Log 
ORDER BY @order"; 

List<object> parameters = new List<object>(); 
parameters.Add(new SqlParameter("top", top)); //top is int with value 50 
parameters.Add(new SqlParameter("order", order)); //order is string with value Date desc 

return context.Database.SqlQuery<Log>(sql, parameters.ToArray()).ToList(); 

我得到

「附加信息:附近有語法錯誤「 @最佳'。」。

我哪裏錯了?

+1

這樣寫:'SELECT TOP(@top)' – gypsyCoder

回答

3

重新排列您的查詢如下

string sql = @" 
SELECT TOP (@top) * 
FROM Log 
ORDER BY @order"; 

編輯

string sql = @" 
SELECT TOP @top * 
FROM Log 
ORDER BY "; 

sql += order; 

List<object> parameters = new List<object>(); 
parameters.Add(new SqlParameter("top", top)); //top is int with value 50 

return context.Database.SqlQuery<Log>(sql, parameters.ToArray()).ToList(); 
+0

謝謝,這是解決上面的參數。現在我得到了「附加信息:由ORDER BY編號1標識的SELECT項目包含一個變量,作爲標識列位置的表達式的一部分。只有在引用列名稱的表達式進行排序時,變量才被允許。那是什麼? – Sauron

+0

是不是使用列名作爲'@ order'值? – gypsyCoder

+0

列名稱爲「Date」(log4net),並且@order字符串值爲「Date desc」 – Sauron