【问题标题】:sort list by custom filter of string.contains按 string.contains 的自定义过滤器排序列表
【发布时间】:2013-11-15 11:34:15
【问题描述】:

在一些 Linq 查询方面需要一些帮助。

我正在尝试按自定义顺序排列一个列表,我可以为我尝试排序的两个参数执行此操作,但第三个似乎更难做到。

我现在拥有的是:

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

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

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

此外,对于字符串的最后两位输出的内容,有 9 种不同的选项可用,因此我需要找到使用所有选项的最简单方法。

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

谢谢。

【问题讨论】:

  • 你应该看看动态 linq
  • 你的问题有点不清楚。 “XML 字段中的字符串”是什么意思? XML 字段在哪里?
  • 抱歉,该字段位于标签 内的 XML 文件中。希望这更有意义。

标签: c# linq list sorting


【解决方案1】:

正如 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();

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

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2021-04-02
    • 2017-07-30
    • 1970-01-01
    • 2014-12-09
    • 2015-12-26
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多