动态Linq变量排序 [英] Dynamic Linq Order By Variable
问题描述
我有一张表,我正在为此编写一些 C#
selenium
自动化程序,并且在使用Dynamic Linq时需要一些帮助.假设我有一个基本的 AcctNum
, AcctDate
和 AcctName
记录,并且每个字段都可以由用户排序.他们可以选择 AcctNum
(asc), AcctDate
(asc),最后选择 AcctName
(asc).
I have a table that I am writing some C#
selenium
automation for and need some help using Dynamic Linq. Let's say I have a basic AcctNum
, AcctDate
and AcctName
record and each field can be sorted by the user. They could choose AcctNum
(asc), AcctDate
(asc) and finally AcctName
(asc).
那将是:
var sortedCode = records.OrderBy(r => r.AcctNum)
.ThenBy(r => r.AcctDate)
.ThenBy(r => r.AcctName)
.ToList();
不过,用户还可以选择 AcctNum
(描述), AcctDate
(描述),最后选择 AcctName
(描述).
However the user could also choose AcctNum
(desc), AcctDate
(asc) and finally AcctName
(desc).
我想做的是使用Dynamic Linq并使每个排序顺序成为一个变量.
What I would like to do is use Dynamic Linq and make each sort order a variable.
所以像这样:
//passed in values:
var varAcctNumOrd = "desc";
var varDateOrd = "asc";
var varAcctOrd = "desc";
var sortedCode = records.OrderBy(r => r.AcctNum, varAcctNumOrd)
.ThenBy(r => r.AcctDate, varDateOrd)
.ThenBy(r => r.AcctNum, varAcctOrd)
.ToList();
这可能吗?
推荐答案
如果我理解正确,那么以下简单的自定义扩展方法就可以完成这项工作:
If I understand correctly, the following simple custom extension methods should do the job:
public static class LinqExtensions
{
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
bool ascending)
{
return ascending ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector);
}
public static IOrderedEnumerable<TSource> ThenBy<TSource, TKey>(
this IOrderedEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
bool ascending)
{
return ascending ? source.ThenBy(keySelector) : source.ThenByDescending(keySelector);
}
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(
this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector,
bool ascending)
{
return ascending ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector);
}
public static IOrderedQueryable<TSource> ThenBy<TSource, TKey>(
this IOrderedQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector,
bool ascending)
{
return ascending ? source.ThenBy(keySelector) : source.ThenByDescending(keySelector);
}
}
其用法将是:
//passed in values:
var varAcctNumOrd = "desc";
var varDateOrd = "asc";
var varAcctOrd = "desc";
var sortedCode = records.OrderBy(r => r.AcctNum, varAcctNumOrd != "desc")
.ThenBy(r => r.AcctDate, varDateOrd != "desc")
.ThenBy(r => r.AcctNum, varAcctOrd != "desc")
.ToList();
这篇关于动态Linq变量排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!