【问题标题】:LINQ to Entities - Simple Way to split resultset into multiple objectsLINQ to Entities - 将结果集拆分为多个对象的简单方法
【发布时间】:2014-05-22 08:20:00
【问题描述】:

我有一个表格,其中包含数百种产品多年的每周销售数据。 简而言之,我有 3 列:ProductID、数量、[和日期(周/年),与问题无关]

为了处理数据,我想使用 LINQ 获取所有内容。在下一步中,我想为销售数据创建一个对象列表,其中一个对象由 ProductId 和相应销售数据的数组组成。

编辑:紧接着,我将在我的程序中处理所有检索到的数据产品,方法是将销售额作为数组传递给统计软件(R 和 R dot NET)以获得预测。

是否有一种简单(内置)的方法来完成此操作?

如果不是,为了按产品处理销售产品, 我应该只使用循环创建提到的列表吗?

或者,就性能而言,我应该避免所有这些,并且:

根据需要从数据库中逐个产品地获取销售数据?

或者我应该从结果集中制作一个大列表(使用 query.toList())并从那里逐个产品地获取我的销售数据?

【问题讨论】:

  • 不清楚你在问什么(一些示例代码、输入示例和预期输出可以使这个问题更好),但也许你需要按产品 ID 分组。无法从您提供的信息中告诉您更多信息
  • 乍一看:看看GroupBy()方法。
  • 我需要每个产品的销售数据数组 - 请参阅编辑。
  • @MartinZotter 什么是销售数据?数量值数组?
  • 是的,只是一个 int 值数组。

标签: c# linq linq-to-entities


【解决方案1】:

嗯,有点像

var groupedByProductId = query.GroupBy(p => p.ProductId).Select(g => new
        {
            ProdcutId = g.Key,
            Quantity = g.Sum(p => p.Quantity)
        });

或者,如果您不想求和,并且可能需要将数量作为int 的数组,由Date 排序。

var groupedByProductId = query.GroupBy(p => p.ProductId).Select(g => new
        {
            ProdcutId = g.Key,
            Quantities = g.OrderBy(p => p.Date).Select(p => p.Quantity).ToArray()
        });

或者您可能需要传递数据并且匿名类型不合适。您可以创建IDictionary<int, int[]>

var salesData = query.GroupBy(p => p.ProductId).ToDictionary(
        g => g.Key,
        g => g.OrderBy(p => p.Date).Select(p => p.Quantity).ToArray());

那么以后,

int productId = ...
int[] orderedQuantities = salesData[productId];

将是有效代码(减去省略号。)

【讨论】:

  • @MartinZotter,我误解了这个问题吗?
  • 不,这正是我想要的,尤其是 IDictionary 应该是满足我需求的好方法
【解决方案2】:

您可以创建一个带有 id 和 int 数据列表的 Product 类。如下:

Public class Product{

public List<int> list = new List<int>();
public int Id;
Public Product(int id,params int[] list){
   Id = id;
   for (int i = 0; i < list.Length; i++)
        {
            list.Add(list[i]);
        }
}
}

然后使用:

query.where(x=>new Product(x.ProductId,x.datum1,x.datum2,x.datum3));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多