通过string.contains的自定义过滤器排序列表

时间:2013-11-15 11:34:16

标签: c# linq list sorting

在这里需要一些Linq查询的帮助。

我正在尝试将一个列表放在一个自定义顺序中,我可以为我尝试排序的两个参数执行这些操作,但第三个参数似乎要难得多。

目前我所拥有的是:

return this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description).toList();

现在我需要添加第三个参数,该参数由XML字段中的字符串设置。我有一个只是一串字母的字段,需要使用字符串的最后两个字母来定义顺序。

任何人都可以告诉我如何做到这一点?这是可以用Linq完成的事情,还是我需要编写一个单独的方法来执行此操作?

此外,还有9种不同的选项可用于字符串最后两位数的输出,因此我需要找到最简单的方法来处理所有选项。

如果这是一个巨大的n00b问题,任何建议/指示/帮助表示赞赏和道歉......但我们都需要以某种方式学习!

感谢。

1 个答案:

答案 0 :(得分:0)

正如Jens Kloster建议的那样,你应该看看Dynamic Linq这个问题。

查看此帖子以获取示例和代码。一个限制是您必须使用IQueryable<T>而不是IEnumerable<T>,但这可能不是问题。

您的代码看起来像这样:

var sortingCodeToSortField = new Dictionary<string,string>
    { {"ei", "EmployeeId"}, {"na", "Name"}, {"ag", "Age" } };

string sortCode = GetSortCodeFromXml(inputXml);
string fieldToSortOn = sortingCodeToSortField[sortCode];

var whatYouHaveSoFar = this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description);

var whatYouWant = whatYouHaveSoFar.AsQueryable.OrderBy(fieldToSortOn);

return whatYouWant.ToList();

动态Linq库可能有点傻瓜;请务必查看下载附带的html页面,因为它有比Scott Gu的帖子更好的文档。祝你好运,如果我误解了什么,请随时再问。