【问题标题】:Sort Datatable and Rank Using ratio使用比率对数据表进行排序和排名
【发布时间】:2012-03-25 04:01:07
【问题描述】:

我有一个查询,我从数据库中获取一些列,这是简单的选择语句,然后我将列添加到这个数据表中:

dt.Columns.Add(new DataColumn("ratio", typeof(double)));

然后我有另一个名为 Rank 的列,它再次手动添加如下:

dt.Columns.Add(new DataColumn("Rank", typeof(int)));

现在我如何首先按比率排序,然后使用比率添加排名,例如比率越高,排名越高,例如,如果比率是 3、5 和 9,一旦按比率排序,它应该是:

rank ratio
1    9
2    5
3    3

编辑:

比率是通过将我的查询中的两列相除来计算的

 foreach (DataRow row in dt.Rows)
 {
row["Ratio"] = (Convert.ToDecimal(row["LastMonth"]) / NoOfBranches).ToString("0.##");
 }

谢谢

【问题讨论】:

  • 如果您告诉我们您是如何确定比率的,我可以让您直接从 SQL Server 获取该查询(假设那是您的 RDBMS),而无需在 C# 代码中添加它们
  • 您能否仅使用您的数据获得每一行的比率,或者有一个应用程序规则来获得它?
  • @Adrian 我在我的 sql 查询中使用两个字段计算比率 - 我将更新问题
  • @LuiggiMendoza 我得到了 dt.rows 上每个循环的基于行的比率,并将我的两个查询列除以得到比率
  • @Sam1 看起来您可以在查询中生成比率,无需在运行时动态添加列。

标签: c# sql sorting datacolumn


【解决方案1】:

使用您提供给我们的信息和限制,我将建议下一个代码:

dt.Columns.Add(new DataColumn("Ratio", typeof(double)));
dt.Columns.Add(new DataColumn("Rank", typeof(int)));

foreach (DataRow row in dt.Rows)
{
    row["Ratio"] =
        (Convert.ToDecimal(row["LastMonth"]) / NoOfBranches).ToString("0.##");
}
//sorting the DataTable using the new DataColumn
dt.DefaultView.Sort = "Ratio DESC";
//after the sort, set the rank for each one
int rank = 1;
foreach (DataRow row in dt.Rows)
{
    row["Rank"] = rank++;
}

forum post中提取的示例。

【讨论】:

  • 您需要将排序从 ASC 切换到 DESC。他想要高低比例。
  • @ImGreg 回答已编辑,并添加了设置排名列和值的代码
【解决方案2】:

如果您想从世界的 C# 端执行此操作:

DataTable dt = new DataTable();
dt.DefaultView.Sort = "ratio DESC";
dt.Columns.Add(new DataColumn("Rank", typeof(int)));
int count = 1;
foreach (DataRowView dr in dt.DefaultView)
{
    dr["Rank"] = count++;
}

在使用 DataTable 时,您需要参考 dt.DefaultView,因为它是表格的排序版本。有关详细信息,请参阅 MSDN:

http://msdn.microsoft.com/en-us/library/system.data.datatable.defaultview.aspx

【讨论】:

  • 无论何时将数据表用于任何事情,都需要将其称为:dt.DefaultView,否则它将按照最初放置在数据表中的顺序。
  • 很酷,解决了它你需要编辑你的代码来foreach(DataRowView dr .....谢谢你:)
  • 没问题。很高兴为您提供帮助:)如果您认为合适,请标记为答案;)
【解决方案3】:

直接来自数据库:

SELECT RANK() OVER (ORDER BY ratio DESC) AS rank,ratio FROM [YourTableName]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2017-05-18
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多