我是linq的新手..我遇到了一个场景。即,
我必须根据用户输入对搜索结果进行排序。
用户输入是姓氏,名字和标题。对于输入3下拉是有的,我必须根据所选的值对结果进行排序。
我试过
order = Request["orders"].Split(',');
var param = order[0];
var p1 = typeof(Test).GetProperty(param);
param = order[1];
var p2 = typeof(Test).GetProperty(param);
param = order[2];
var p3 = typeof(Test).GetProperty(param);
model.Test = (from tests in model.Test
select tests).
OrderBy(x => p1.GetValue(x, null)).
ThenBy(x => p2.GetValue(x, null)).
ThenBy(x => p3.GetValue(x, null));
但它不起作用。
我想要这样的qry
from tests in model.Test
select tests).OrderBy(x => x.lastname).
ThenBy(x => x.firstname).ThenBy(x => x.Title);
order[0]== lastname but how can i use it in the place of OrderBy(x => x.order[0])..?
提前致谢。
答案 0 :(得分:4)
我解决了我的情况如下 //用于排序的列列表
List<string>order = Request["orders"].Split(',').ToList();
//将列字符串映射到属性
var mapp = new Dictionary<string, Func<Test, string>>
{
{"FirstName", x => x.FirstName},
{"LastName", x => x.LastName},
{"SimpleTitle", x => x.SimpleTitle}
};
//用户输入的订单
var paras = new List<Func<Test, string>>();
foreach (var para in order)
{
if(!string.IsNullOrEmpty(para))
paras.Add(mapp[para]);
}
//sorting
model.Test= model.Test.OrderBy(paras[0]).ThenBy(paras[1]).ThenBy(paras[2]);
全心全意,
答案 1 :(得分:1)
实际上,您正在寻找动态linq查询,而不是尝试Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)
允许这样做
这意味着您可以动态传递字符串属性名,以便在orderby函数中缩短您的集合
您还可以阅读:Dynamic query with Linq
答案 2 :(得分:0)
您可以手动编写表达式(任何Expression
),然后将其附加到查询的上一部分。您可以在“Sorting in IQueryable using string as column name”中找到更多信息。