如何通過列變量進行訂單,因爲我在頁面上有一個下拉菜單,並且我想根據在此下拉列表中選擇的上下訂單來顯示網格,例如價格,代碼,評級,描述等我等,我不想爲每列寫一個單獨的查詢。希望通過Linq查詢中的變量進行查詢
from lm in lDc.tbl_Products
where lm.TypeRef == pTypeId
orderby lm.Code ascending
select new;
如何通過列變量進行訂單,因爲我在頁面上有一個下拉菜單,並且我想根據在此下拉列表中選擇的上下訂單來顯示網格,例如價格,代碼,評級,描述等我等,我不想爲每列寫一個單獨的查詢。希望通過Linq查詢中的變量進行查詢
from lm in lDc.tbl_Products
where lm.TypeRef == pTypeId
orderby lm.Code ascending
select new;
假設你想通過SQL進行排序,那麼你將需要通過排序列/類型。查詢被推遲,直到你真正做的選擇,所以你可以建立步驟查詢,一旦你完成像這樣執行它:如果你想這樣做SQL之外,那麼只得到一個基本的
// Do you query first. This will NOT execute in SQL yet.
var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId);
// Now add on the sort that you require... you could do ascending, descending,
// different cols etc..
switch (sortColumn)
{
case "Price":
query = query.OrderBy(q => q.Price);
break;
case "Code":
query = query.OrderBy(q => q.Code);
break;
// etc...
}
// Now execute the query to get a result
var result = query.ToList();
導致不進行排序,然後將OrderBy應用到您需要的排序條件的結果庫中。
您可以在不同的步驟中「建立」一個LINQ查詢。
生成您的基本查詢以返回未排序的信息。在您嘗試枚舉結果之前,不會執行該查詢。
var data = from lm in lDc.tbl_Products
where lm.TypeRef == pTypeId
select new;
然後在您的事件處理函數中,在將結果綁定到網格之前,應用您希望的任何排序。
var orderedData = from lm in data
order lm.Code ascending
select new;
// TODO: Display orderedData in a grid.
您列舉的完整查詢是將要評估的完整查詢。這意味着您可以爲下拉菜單中的每個項目運行單獨的查詢,這些查詢是通過「基本」查詢構建的。
是但在此我必須寫多個if語句?我可以從if語句 – Azhar 2010-06-20 07:25:39
public static IEnumerable<T> OrderByIf<T,TKey>(this IEnumerable<T> source, bool condition, Func<T, TKey> keySelector)
{
return (condition) ? source.OrderBy(keySelector).AsEnumerable() : source;
}
用法:
var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId)
.OrderByIf(sortColumn == "Price", p => p.Price)
.OrderByIf(sortColumn == "Code", p => p.Code);
參見:http://stackoverflow.com/questions/41244/dynamic-linq-orderby – 2010-06-20 08:23:39