LINQ to Entities - 将结果集拆分为多个对象的简单方法

时间:2014-05-22 08:20:01

标签: c# linq linq-to-entities tolist

我有一张表,其中包含数百种产品的多年销售数据。 简化,我有3列:ProductID,Quantity,[和Date(周/年),与问题无关]

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

编辑:之后,我会将销售作为数组传递给统计软件(R with R dot NET),以便在我的程序中处理所有检索到的数据产品,以获得预测。

是否有简单的(内置)方法来实现这一目标?

如果没有,为了按产品处理销售产品, 我应该使用循环创建提到的List吗?

或者,就性能而言,我应该避免这一切,并且:

根据需要从数据库中获取产品的销售数据?

或者我应该从结果集中创建一个大的List(带有query.toList())并从那里获得我的销售数据产品?

2 个答案:

答案 0 :(得分:0)

您可以使用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));

答案 1 :(得分:0)

呃,像是

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

或者,如果您不想要求和,则instread需要将数量作为由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];

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