繁体   English   中英

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

[英]sort list by custom filter of string.contains

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

我正在尝试以自定义顺序整理一个列表,我可以对要尝试排序的两个参数执行此操作,但是第三个参数似乎更难处理。

我目前所拥有的是:

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

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

有人能启发我如何做到这一点吗? 这是Linq可以完成的事情,还是我需要编写一个单独的方法来做到这一点?

另外,在字符串的后两位数字中有9种不同的输出选项,因此我需要找到使用所有选项的最简单方法。

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

谢谢。

正如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的帖子具有更好的文档。 祝您好运,请随时询问我是否误解了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM