-1

我有以下类型的两个数组arr1arr2

class Data
{
  public int IdProduct;
  public double Price;
}

我需要将arr2的价格减去arr1但数组的项目是不同查询的结果,因此arr1中的产品数量不一定与arr2中的产品数量匹配,并且数组中没有重复的产品。

我需要在每个数组中按产品做减法乘积,即。

var total =
  from a1 in arr1
  join a2 in arr2 on a1.IdProducto equals a2.IdProducto
  select new
  {
    Product = a1.IdProduct,
    Price = a1.Price - a2.Price
  };
4

3 回答 3

2

像这样的东西?

var q = from a in arr1
                  join b in arr2 on a.IdProduct equals b.IdProduct into c
              from x in c.DefaultIfEmpty()
              select new Data {
                IdProduct = a.IdProduct,
                Price = x == null ? a.Price : a.Price - x.Price
              };

arr1 = q.ToArray();
于 2013-04-11T15:20:35.033 回答
1
var result = arr1.Concat(arr2)
            .GroupBy(d => d.IdProduct)
            .Select(x => new Data
            {
                IdProduct = x.Key,
                Price = x.Select((y,i) => i == 0 ? y.Price : -y.Price).Sum()
            }).ToList();
于 2013-04-11T15:35:38.090 回答
0

你有两个总价差Data的数组?

arr1.Sum(d => d.Price) - arr2.Sum(d => d.Price);

基本上这段代码总结了两个数组并在之后减去。因此,总工作量随着数组的长度线性增长O(n+m): .

于 2013-04-11T15:19:33.733 回答