【问题标题】:Custom sorting LINQ C#自定义排序 LINQ C#
【发布时间】:2019-06-22 09:48:37
【问题描述】:

我有对象列表。我正在尝试使用其中一个属性对其进行排序。

我正在尝试以下内容:

items.OrderBy(x => x.Name).ToList()

items 可以包含 Name 的值,如下所示:

case 1 - abc,xyz,byc,myu
case 2 - abc3,xur2,iuy7

如果任何值包含 int(数字),我想按降序对列表进行排序。 所以在案例2中,我想按降序排序。在情况 1 中,排序将按升序排列。问题是如何识别列表是否包含任何整数?这样我就可以决定排序了。

public class TestClass
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
}

【问题讨论】:

  • 这不是自定义排序,而是基于值的不同顺序方向。您不能在排序操作中间更改排序方向,因此您必须在调用 OrderBy()OrderByDescending() 之前决定使用哪种排序。
  • 您可以使用ICompare 扩展您的类,并使用您自己的逻辑创建compare 方法。然后,当调用您的自定义方法时,它会使用您的自定义 compare 方法对您的列表进行排序。查看this 链接了解更多信息。你可以找到例子等等

标签: c#


【解决方案1】:

您可以使用Anychar.IsDigit 来确定是否存在:

if(items.Any(x => x.Name.Any(char.IsDigit)))
{
    // descending  
    items = items.OrderByDescending(x => x.Name)).ToList()
}
else
{
    // ascending
    items = items.OrderBy(x => x.Name)).ToList()
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多