c# - 将一个数组拆分为另一个数组

标签 c# sql

我有一个列表,其中包含

  1. 价格
  2. 代码

我已经设法将列表拆分为一个数组,但我想进一步拆分数组,以便我可以分别获取 PriceCode 并对Price 升序排列。进行排序时,我还需要将 Code 一起排序,因为 Price 是针对特定 Code 的。

所以它会是这样的: 原始列表:

1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH;

拆分为 arrPrice 后:

[1588,8DNY],[1488,ACNY],[1288,7DPE],[1888,8HUC],[1488,8WNH]

第二次拆分 2ndarrPrice:

[1588],[1488],[1288],[1888],[1488]

第二次拆分 2ndarrCode:

[8DNY],[ACNY],[7DPE],[8HUC],[8WNH]

按升序排列价格:

[1288],[1488],[1488],[1588],[1888]

代码将被相应地排序:

[7DPE],[ACNY],[8HUC],[8WNH]

第一次 split 后我卡住了。

  if (lblprices.Text != "")
    {
        arrprice = lblprices.Text.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

        Array.Sort(arrprice);

        for (i = 0; i < arrprice.Length; i++)
        {
            arr2 = arrprice[i].Split(',');
            SQL2 = "SELECT DISTINCT [TP].[TCode], ";
            SQL2 += "[TP].[TName], ";
            SQL2 += "[TP].[TName_CN],  ";
            SQL2 += "[TP].[TourType], ";
            SQL2 += "[TP].[LastUpdateDate], ";
            SQL2 += "[TP].[ValidityFrom],  ";
            SQL2 += "[TP].[ValidityTo], ";
            SQL2 += "[CL].[CountryCode], ";
            SQL2 += "[CL].[CityName] ";

            SQL2 += "FROM [CL], [TP], [TourItinerary],[TourHotel] ";

            SQL2 += "WHERE [TP].[Activation] = 1  ";
            SQL2 += "AND [TP].[TCode] = '" + arr2[1] + "' ";
            SQL2 += "ORDER BY [TP].[LastUpdateDate] DESC ";

            objConnTour.Open();

            SqlCommand command = new SqlCommand(SQL2, objConnTour);
            SqlDataReader dataReader = command.ExecuteReader();

            if (dataReader.Read())
            {
                html += "<tr><td class=\"border\">" + dataReader["TCode"] + "</td>";
                html += "<td class=\"border\">" + dataReader["TName"] + "</td>";
                html += "<td class=\"border\">" + dataReader["TName_CN"] + "</td>";
                html += "<td class=\"border\">" + dataReader["TType"] + "</td>";
                html += "<td class=\"border\">" + dataReader["LastUpdateDate"] + "</td>";
                html += "<td class=\"border\">" + dataReader["ValidityFrom"] + "</td>";
                html += "<td class=\"border\">" + dataReader["ValidityTo"] + "</td>";
                html += "<td class=\"border\">" + dataReader["CountryCode"] + "</td>";
                html += "<td class=\"border\">" + dataReader["CityName"] + "</td>";
                html += "<td class=\"border\">from&nbsp;<span class=\"price-red\">S$<b>" + arr2[0] + "</b></span><td/></tr>";
            }

            dataReader.Close();

            objConnTour.Close();
        }
    }
    return html;

上面的代码无法按升序对价格进行排序。正如您在我的 arr2 拆分中看到的,我需要同时使用 CodePrice,因为我将根据 从数据库中检索数据>代码

--------编辑------------

好吧,问题是如果价格在 1000-1999 之间,它会得到完美排序。 但是如果我有小于1000的价格,就不会按升序排序

示例是使用@jekcom提供的代码的结果截图

这是我还没有拆分 List 并从数据库中原始检索它们的时候

Original, Unsorted

这是使用@jekcom 的代码排序的

enter image description here

请注意价格未按升序排序。

最佳答案

您发布的代码不起作用,因为您没有根据数组的 Price 部分对数组进行排序。如果你有 Linq:

if (lblprices.Text != "")
{
    arrprice = lblprices.Text.Split(new char[] { ';' }, 
                                    StringSplitOptions.RemoveEmptyEntries);
    var lst = arrprice.OrderBy(x => int.Parse(x.Split(',')[0])).ToList();

    for (i = 0; i < lst.Count; i++)
    {
        arr2 = lst[i].Split(',');

        //rest of your code ----------------
    }

这应该有效,在 sql 术语中这应该给出

ORDER BY PRICE ASC, [TP].[LastUpdateDate] DESC

关于c# - 将一个数组拆分为另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13172857/

相关文章:

c# - ASP.NET MVC5 Html.Beginform 不调用操作方法

c# - 如何在 LINQ C# 中有效选择导航属性

c# - 如何在 LINQ 查询中按月分组?

c# - 调用 GC.SuppressFinalize(this) 时是否存在不使用 "this"的用例?

c# - 通用 NOT 约束 where T : ! IEnumerable

c# - SQL 中的数据分组

mysql - 获取mysql中特定用户的排名

php - 将准备好的语句包装在函数中

sql - 计算两个日期之间缺失的日期范围和重叠的日期范围

sql - 从字符串中提取日期并将其插入Microsoft SQL Server 2012字段