3

我是 linq 的新手。我被一个场景困住了。IE,

我必须根据用户输入对搜索结果进行排序。

用户输入是姓氏、名字和头衔。对于输入,有 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])..?

提前致谢。

4

3 回答 3

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]);

谢谢大家,

于 2013-01-15T11:14:57.460 回答
1

实际上,您正在寻找动态 linq 查询,而不是尝试动态 LINQ(第 1 部分:使用 LINQ 动态查询库)

允许这样做

在此处输入图像描述

这意味着您可以动态传递字符串属性名以缩短您在 orderby 函数中的集合

您还可以阅读:使用 Linq 进行动态查询

于 2013-01-15T07:10:22.077 回答
0

您可以从片段中手动组合表达式 (any Expression),然后将其附加到查询的前一部分。您可以在“使用字符串作为列名在 IQueryable中排序”中找到更多信息。

于 2013-01-15T08:07:20.613 回答