Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对末尾有空列值的C#Datatable进行排序_C#_.net_Linq_Datatable_Dataview - Fatal编程技术网

如何对末尾有空列值的C#Datatable进行排序

如何对末尾有空列值的C#Datatable进行排序,c#,.net,linq,datatable,dataview,C#,.net,Linq,Datatable,Dataview,我有一个包含1000行的C#数据表。但主200行具有空值(多列)。过滤器将以空值的形式出现在这些列上,并作为最后一个值占用。我希望输出将在表中发生,或者在新表中发生,但不作为linq行。请帮帮我 图片说明更多单词,请参考以下内容以更好地理解: 这里有两件事你应该考虑: “空值”:要对后跟空值列的项目进行排序,需要.OrderBy(s=>String.IsNullOrEmpty(s[“OrderNo”].ToString()) “订单编号格式”:要对需要使用的自定义订单编号进行排序。如您在问题中所

我有一个包含1000行的C#数据表。但主200行具有空值(多列)。过滤器将以空值的形式出现在这些列上,并作为最后一个值占用。我希望输出将在表中发生,或者在新表中发生,但不作为linq行。请帮帮我

图片说明更多单词,请参考以下内容以更好地理解:


这里有两件事你应该考虑:

  • 空值”:要对后跟空值列的项目进行排序,需要
    .OrderBy(s=>String.IsNullOrEmpty(s[“OrderNo”].ToString())
  • 订单编号格式”:要对需要使用的自定义订单编号进行排序。如您在问题中所示,我假设订单号的格式可以是
    XXXXX
    XXXX-XXXX
    因此,您需要首先
    OrderBy
    空值

    public class OrderNoComparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            int xFirstValue = 0;
            int xSecondValue = 0;
    
            int yFirstValue = 0;
            int ySecondValue = 0;
    
            if (x.Contains("-"))
            {
                xFirstValue = Convert.ToInt32(x.Split(new char[] { '-' })[0]);
                xSecondValue = Convert.ToInt32(x.Split(new char[] { '-' })[1]);
            }
            else
            {
                xFirstValue = Convert.ToInt32(x);
            }
    
            if (y.Contains("-"))
            {
                yFirstValue = Convert.ToInt32(y.Split(new char[] { '-' })[0]);
                ySecondValue = Convert.ToInt32(y.Split(new char[] { '-' })[1]);
            }
            else
            {
                yFirstValue = Convert.ToInt32(y);
            }
    
    
            if (xFirstValue > yFirstValue)
            {
                return 1;
            }
            else if (xFirstValue < yFirstValue)
            {
                return -1;
            }
            else //means equal
            {
                if (xSecondValue > ySecondValue)
                {
                    return 1;
                }
                else if (xSecondValue == ySecondValue)
                {
                    return 0;
    
                }
                else
                {
                    return -1;
                }
            }
        }
    }
    
    然后输出将与您预期的一样:

    569-875
    569-875
    569-975
    569865
    569975
    

    这里有两件事你应该考虑:

  • 空值”:要对后跟空值列的项目进行排序,需要
    .OrderBy(s=>String.IsNullOrEmpty(s[“OrderNo”].ToString())
  • 订单编号格式”:要对需要使用的自定义订单编号进行排序。如您在问题中所示,我假设订单号的格式可以是
    XXXXX
    XXXX-XXXX
    因此,您需要首先
    OrderBy
    空值

    public class OrderNoComparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            int xFirstValue = 0;
            int xSecondValue = 0;
    
            int yFirstValue = 0;
            int ySecondValue = 0;
    
            if (x.Contains("-"))
            {
                xFirstValue = Convert.ToInt32(x.Split(new char[] { '-' })[0]);
                xSecondValue = Convert.ToInt32(x.Split(new char[] { '-' })[1]);
            }
            else
            {
                xFirstValue = Convert.ToInt32(x);
            }
    
            if (y.Contains("-"))
            {
                yFirstValue = Convert.ToInt32(y.Split(new char[] { '-' })[0]);
                ySecondValue = Convert.ToInt32(y.Split(new char[] { '-' })[1]);
            }
            else
            {
                yFirstValue = Convert.ToInt32(y);
            }
    
    
            if (xFirstValue > yFirstValue)
            {
                return 1;
            }
            else if (xFirstValue < yFirstValue)
            {
                return -1;
            }
            else //means equal
            {
                if (xSecondValue > ySecondValue)
                {
                    return 1;
                }
                else if (xSecondValue == ySecondValue)
                {
                    return 0;
    
                }
                else
                {
                    return -1;
                }
            }
        }
    }
    
    然后输出将与您预期的一样:

    569-875
    569-875
    569-975
    569865
    569975
    

    您必须首先对列中是否包含数据的行进行排序,然后使用LINQ按行列值进行排序。这将是一个简单的
    orders.OrderBy(x=>string.IsNullOrEmpty(x))
    (或
    string.IsNullOrWhiteSpace
    )。如果您还想按内容订购,只需添加一个
    ,然后再添加一个
    。如果没有LINQ,您将不得不实现一个定制的
    IComparer
    。这是您想要的还是您指的是不同的东西?@mynameisdd我的答案解决了您的问题吗?您必须首先对列中是否包含数据的行进行排序,然后使用LINQ按行列值进行排序。这将是一个简单的
    orders.OrderBy(x=>string.IsNullOrEmpty(x))
    (或
    string.IsNullOrWhiteSpace
    ). 如果您还想按内容订购,只需添加一个
    ,然后再添加一个
    。如果没有LINQ,您将不得不实现一个定制的
    IComparer
    。这就是你想要的还是你指的是不同的东西?@MyNameIsDND我的回答解决了你的问题吗?