【问题标题】:Sorting an IList by number in C# [duplicate]在C#中按数字对IList进行排序[重复]
【发布时间】:2016-01-02 06:11:29
【问题描述】:

我在 C# 中有一个 IList,要根据数字按顺序排序。问题在于大于 10 的数字(例如:{11,12,13})。它们在小于 10 的数字之前排序(例如:{6,7,8}),因此在排序结束时,我得到第一个位置为 11 的模型,最后一个位置为 6 或 7 的其他模型。

我确实将此订单号作为字符串传递,我不确定这是问题所在还是我写错了代码。有什么建议吗?

代码:

IList<TestGrid> myList = new List<TestGrid>();
foreach (DataRow row in Browse.GridNodes.Rows)
{
    TestGrid model = new TestGrid();
    model.Name = row["Name"].ToString();
    model.Type = row["Type"].ToString();
    model.NodeId = row["NodeId"].ToString();
    model.ActivOrderNo = ReadAttribute(row["NodeId"].ToString()+".CONFIG.OrderNumber", 13);
    myList.Add(model);
}

IList<TestGrid> sortedList = myList.OrderBy(r => r.ActivOrderNo).ToList();

【问题讨论】:

  • 这是什么意思? List&lt;TestGrid&gt; sortedList = myList.OrderBy(r =&gt; int.Parse(r.ActivOrderNo.Replace(".CONFIG.OrderNumber", ""))).ToList();
  • No ".CONFIG:OrderNumber" 部分只是用于从数据库中获取数据的方法中,然后我想根据它们的顺序对其进行排序

标签: c# list linq sorting


【解决方案1】:

您应该将此值转换为数字类型。例如,如果您的数据允许,则为整数。

List<TestGrid> sortedList = myList.OrderBy(r => Convert.ToInt32(r.ActivOrderNo)).ToList();

目前,您的排序是在字符串“12”与“1”上进行的,但听起来您实际上想要对字符串中数字的值进行排序。

【讨论】:

  • 是的,完全正确,但是当我使用 Convert.ToInt32 时,由于某种原因,列表没有作为 json 传递给网格。所以它不会出现在视图中!这是因为发生异常“输入字符串的格式不正确。”
  • 在这种情况下,有些数据不是整数——可能有些是空值或有小数值?您可以将 Convert.ToInt32 替换为您自己的函数,以获取您拥有的字符串的数值。
  • 答案是正确的,但我有一些空值和数据库中的其他字符串,我修复了它并且它有效。谢谢
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
相关资源
最近更新 更多