如何通过Column变量进行排序,因为我在页面上有一个下拉列表,我想根据在此下拉列表中选择的sord顺序显示网格,例如价格,代码,评级,描述等等,我不想写一个单独的查询每列。
from lm in lDc.tbl_Products
where lm.TypeRef == pTypeId
orderby lm.Code ascending
select new;
答案 0 :(得分:6)
假设您想通过SQL进行排序,那么您需要传递排序列/类型。查询将被推迟,直到您实际执行select,这样您就可以逐步构建查询,一旦完成,就执行它:
// 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();
如果您想在SQL之外执行此操作,那么只需获得没有排序的基本结果,然后根据您需要的排序条件将OrderBy应用于结果库。
答案 1 :(得分:3)
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);
答案 2 :(得分:0)
您可以在不同的步骤中“构建”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.
您枚举的完整查询是将要评估的查询。这意味着您可以为下拉列表中的每个项目运行单独的查询,这些查询是根据“基本”查询构建的。