【问题标题】:Using linq to join/union two objects with different columns使用 linq 连接/联合具有不同列的两个对象
【发布时间】:2013-03-30 17:34:10
【问题描述】:

我必须创建两个对象,一个从 csv (fileAuto,first) 创建,另一个从数据表 (dbAuto,second) 创建。两者都有count 列。

我想在多个列和结果中加入两者,以包含第二个与第一个不匹配的项目,还包含count 列和第一个列并将其添加到列表中。

我以为我想使用.Except(),但我不知道如何使用比较器来比较多个列。我认为连接会起作用,但我收到一个错误消息,提示 连接子句中的一个表达式不正确

我对 Linq 的了解很松散,所以我不太确定如何实现这一点。我已经包含了后者的代码。

public class FileAuto
{
    public string DealerCode;        
    public string ModelCode;
    public int ModelYear;
    public string ExteriorCodeCode;
    public string InteriorColorCode;
    public int FileVehicleCount;
}

public class DbAuto
{
    public string DealerCode;
    public string DealershipName;
    public string ModelCode;
    public int ModelYear;
    public string ExteriorCodeCode;
    public string InteriorColorCode;
    public int DbVehicleCount;
}

public class IDiscObj // INVENTORY DISCREPANCIES object
{
    public string DealerCode;
    public string DealershipName;
    public string ModelCode;
    public int ModelYear;
    public string ExteriorCodeCode;
    public string InteriorColorCode;
    public int FileVehicleCount;
    public int DbVehicleCount;
}

var autoscombined = 
    from f in fileInv
    join d in dbInv
        on 
            new {f.DealerCode, f.ModelCode, f.ModelYear, f.ExteriorCodeCode, f.InteriorColorCode} 
        equals 
            new {d.DealerCode, d.ModelCode, d.ModelYear, d.ExteriorCodeCode, d.InteriorColorCode}
    select (a => new IDiscObj {
        DealerCode = f.DealerCode,
        DealershipName = d.DealershipName,
        ModelCode = f.ModelCode,
        ModelYear = f.ModelYear,
        ExteriorCodeCode = f.ExteriorCodeCode,
        InteriorColorCode = f.InteriorColorCode,
        FileVehicleCount = f.FileVehicleCount,
        DbVehicleCount = d.DbVehicleCount
        });

我还希望获取这些结果,并将按我在下面列出的经销商代码分组的车辆数量相加。如果有人能告诉我我是否在这些解决方案的正确轨道上或更合适的方式来实现这一点,那就太好了。

if (DDOlst.Count > 0) //list of IDiscObj 
{
    var ddos = 
        from d in DDOlst
        group d by new { d.DealerCode, d.DealershipName } into g
        select 
            new { 
                g.Key.DealerCode, 
                g.Key.DealershipName, 
                filecnt = g.Sum(d => d.FileVehicleCount), 
                dbcnt = g.Sum(d => d.DbVehicleCount) 
                };
}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您的选择子句中不需要a=>

    var autoscombined = from f in fileInv
        join d in dbInv
        on new {f.DealerCode, f.ModelCode, f.ModelYear, f.ExteriorCodeCode, f.InteriorColorCode} 
            equals new {d.DealerCode, d.ModelCode, d.ModelYear, d.ExteriorCodeCode, d.InteriorColorCode}
        select new IDiscObj {
            DealerCode = f.DealerCode,
            DealershipName = d.DealershipName,
            ModelCode = f.ModelCode,
            ModelYear = f.ModelYear,
            ExteriorCodeCode = f.ExteriorCodeCode,
            InteriorColorCode = f.InteriorColorCode,
            FileVehicleCount = f.FileVehicleCount,
            DbVehicleCount = d.DbVehicleCount
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2019-01-30
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多