【问题标题】:Most efficient way to group SQL Server results into easily-parsable result set将 SQL Server 结果分组为易于解析的结果集的最有效方法
【发布时间】:2016-06-27 11:20:27
【问题描述】:

我在 SQL Server 数据库中有以下数据:

service_id  delivery_id  price_increase
----------  -----------  --------------
    1             1           0.4
    1             2           0.3
    1             3           0.2
    1             4           0.1
    1             5             0
    2             1           0.4
    2             2           0.3
    2             3           0.2
    2             4             0
    2             5             0
    4             1           0.5
    4             2           0.3
    4             3           0.25
    4             4           0.15
    4             5             0

几点:

  • 所有service_id 值将始终具有完整的delivery_id 值(,要求具有delivery_ids 1-5)
  • 不必有完整的 service_id 值(如上所示,service_id 3 没有条目)
  • 就本问题而言,service_id 条目的数量没有限制

这些值将被解析为以下类层次结构:

ServicePricing
 - ServiceId
 - IEnumerable<DeliveryPricing>

在哪里

DeliveryPricing
 - DeliveryId
 - PriceIncrease

从数据库中查询这些值然后使用 C# 解析它们的最简单方法是什么?我可以以一种相当琐碎但乏味的方式来做,检查service_id是否已经在代码中声明等等,但是有什么方法可以对结果进行分组以便我可以更容易遍历它们并有一个明确的边界来声明任一类的新实例?

例如,是否可以将来自同一个service_id 的所有结果放入一个单独的结果集中?

[只是为了澄清,我正在寻找基于 SQL 的建议,而不是如何在 C# 中解析结果集。]

【问题讨论】:

  • 你在使用实体框架吗?
  • 您想要为每个不同的 service_id 设置一个结果集吗?或者你的问题是什么?
  • @ChrisPickford - 不,我没有使用 EF。这会使事情变得非常简单,但就像我说的,我必须解析这些结果。
  • @GuidoG - 如果可以为每个不同的service_id 设置不同的结果集并且如果这是最好的解决方案,那么可以。我正在寻找对齐数据 - 来自查询 - 以使得将其解析为所描述的对象层次结构 - 在 C# 中 - 尽可能简单。
  • 但我不会这样做,我会遍历整个集合(按 service_id 排序)并检查 service_id 何时从其先前值更改。这样会更有效率

标签: c# sql sql-server tsql


【解决方案1】:
select service_id,  delivery_id,  price_increase 
from table order by service_id,  delivery_id 

int? serviceID = null;
ServicePricing sp; 
List<ServicePricing> sps; 
while (rdr.Read())
{
   if(rdr.GetInt(0) <> serviceID)
   {
      if(sp != null) 
        sps.Add(sp);
      serviceID = rdr.GetInt(0);
      sp = new ServicePricing(serviceID); 
   }
   sp.DeliveryPricings.Add(new DeliveryPricing(rdr.GetInt(1), rdr.GetDecimal(2));
}
sps.Add(sp);

【讨论】:

  • 感谢@Paparazzi,但我确实说过“我正在寻找基于 SQL 的建议,而不是如何在 C# 中解析结果集”。
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2013-09-17
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多