首页 > 后端开发 > C++ > 如何使用自定义 IComparer 正确排序 LINQ OrderBy 中的对象?

如何使用自定义 IComparer 正确排序 LINQ OrderBy 中的对象?

Barbara Streisand
发布: 2025-01-02 17:44:08
原创
692 人浏览过

How Can I Use a Custom IComparer to Correctly Sort Objects in LINQ OrderBy?

使用自定义 IComparer对于 Linq OrderBy

问题:

您有一个对象列表,其属性包含特定字符串格式的发票编号,例如 200906/1。 C# 中 Linq OrderBy 的默认排序会导致排序顺序不理想,例如 200906/1、200906/10、200906/11。

解决方案:

To实现您自己的自定义排序顺序,您可以定义一个IComparer接口实现。以下是示例实现:

public class MyComparer : IComparer<Object>
{
    public int Compare(Object stringA, Object stringB)
    {
        string[] valueA = stringA.ToString().Split('/');
        string[] valueB = stringB.ToString().Split('/');

        if (valueA.Length != 2 || valueB.Length != 2)
        {
            return stringA.ToString().CompareTo(stringB.ToString());
        }

        // Parse numbers for comparison
        int numA = int.Parse(valueA[0]);
        int numB = int.Parse(valueB[0]);
        if (numA == numB) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return numA.CompareTo(numB);
        }
    }
}
登录后复制

在原始代码中,您尝试在 Linq OrderBy 中使用 MyComparer,如下所示:

items = items.OrderByDescending(
  x => property.GetValue(x), comparer).ToList();
登录后复制

此方法不正确。使用比较器的正确语法是:

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();
登录后复制

请注意,如果您希望按升序排序,则使用 OrderBy 方法而不是 OrderByDescending。

最后,不要忘记将排序后的项目分配回您的数据源以反映 UI 中的更改:

this.Items = items;
登录后复制

以上是如何使用自定义 IComparer 正确排序 LINQ OrderBy 中的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板