使用Linq减去两个数组

时间:2013-04-11 15:12:58

标签: c# linq

我有以下类型的两个数组 arr1 arr2

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

我需要将 arr2 的价格减去 arr1 ,但数组的项目是不同查询的结果,因此 < em> 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
  };

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();

答案 2 :(得分:0)

您有两个Data数组总价格差异

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

基本上这段代码总结了两个数组并在之后减去。因此,总体努力线性增长与数组的长度:O(n+m)