我有linq查询,如下
string sortby="Date"; //it can be name or something else as well
var query=(from t in Uow.Transactions.GetAllWithReferences()
orderby t.Date descending
select t);
但我想基于sortby变量值以不同的顺序排序。我怎么能用Linq做到这一点?
答案 0 :(得分:1)
使用反射:
string sortby="Date" //it can be name or something else as well
var query=(from t in Uow.Transactions.GetAllWithReferences()
orderby t.GetType().GetProperty(sortby).GetValue(t, null) descending
select t);
答案 1 :(得分:1)
样本类:
private class Tst
{
public int field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
你可以这样做:
var index = 1;
var sortedList = (from l in list
orderby index == 1 ? l.field1.ToString() : index == 2 ? l.field2 : l.field3
select l);
但是,由于字段具有不同的类型,您必须按照l.field1.ToString()
使用lambda的方式是:
var sortedList =
list.OrderBy(l =>
index == 1 ? l.field1.ToString()
: index == 2 ? l.field2
: l.field3)
.Select(l => l).ToList();
答案 2 :(得分:1)
如果你使用OrderBy()LINQ扩展方法,你可以传入一个类似(未经测试)的谓词:
Predicate orderByClause;
if ( blah == "date" )
orderByClause = { order => order.Date };
if ( blah == "something else" )
orderByClause = { order => order.SomethingElse };
var oSortedList = oResultList.OrderBy( orderByClause );
我确定语法如果关闭,但我之前做过类似的事情......
希望这有帮助!
答案 3 :(得分:1)
你可以使用一个库,这是我最喜欢的一个:http://dynamite.codeplex.com/