【问题标题】:how to compare two list and subtract single column value in c#如何在c#中比较两个列表并减去单列值
【发布时间】:2014-12-23 05:55:07
【问题描述】:

我正在尝试比较两个列表并更新第一个列表中的值。

我的代码是

我有一份这样的清单

        ChitNo   Company   LoadingType    BrandCode   PackingCode     GradeCode       Quantity
           1         A         L             B1          P1              G1              100
           2         B         U             B1          P1              G1              90
           3         C         L             B2          P1              G2              200 
           4         D         L             B1          P1              G1              80 

我想按 BrandCode、Packing、GrandCode 和此组合的 LoadingType "L" 数量的总和以及此组合的 LoadingType "U" 数量的分钟数(BrandCode、PackingCode、GradeCode)进行分组。

I 例外输出是

    Brand           Packing           Grade         Quantity
      B1              P1                G1            90
      B2              P1                G2            200

为此,我将代码返回为

       var Loaded = (from d in LoadedList.Where(s => s.LoadingType == "L") group d by new { Brand = d.BrandCode, Packing = d.PackingCode, Grade = d.GradeCode } into g select new { Brand = g.Key.Brand, Packing = g.Key.Packing, Grade = g.Key.Grade, Quantity = g.Sum(e => e.LoadingQty) }).ToList();

       var UnLoaded = (from d in LoadedList.Where(s => s.LoadingType == "U") group d by new { Brand = d.BrandCode, Packing = d.PackingCode, Grade = d.GradeCode } into g select new { Brand = g.Key.Brand, Packing = g.Key.Packing, Grade = g.Key.Grade, Quantity = g.Sum(e => e.LoadingQty) }).ToList();

但我不知道比较它并减去数量请帮助我。提前致谢。

【问题讨论】:

    标签: c# linq asp.net-mvc-4 c#-4.0 linq-to-entities


    【解决方案1】:
    foreach(var item in LoadedList.Where(r=>r.LoadingType == "U"))
    {
        item.Quantity *= -1;
    }
    
    var summary = from d in LoadedList
                  group d by new { Brand = d.BrandCode, Packing = d.PackingCode, Grade = d.GradeCode } into g 
                  select new { Brand = g.Key.Brand, Packing = g.Key.Packing, Grade = g.Key.Grade, Quantity = g.Sum(e => e.LoadingQty) }
    

    【讨论】:

    • 如果 U 数量为负值则错误值 i m 对
    【解决方案2】:
    var difference = (from l in Loaded
                      join u in UnLoaded on new { l.Brand, l.Packing, l.Grade }
                                         equals new { u.Brand, u.Packing, u.Grade } into lu
                      from u in lu.DefaultIfEmpty() 
                      select new { Brand = l.Brand, Packing = l.Packing, 
                                   Grade = l.Grade, Sum = (l.Sum - u != null ? u.Sum : 0)).ToList();
    

    【讨论】:

    • 这是错误的。如果卸载列表不包含已加载的组合,则差异没有得到该行
    • 此代码显示错误,因为“运算符'-'不能应用于'int'和'AnonymousType#1'类型的操作数”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多