C# 使用linq连接/合并具有不同列的两个对象
我必须创建两个对象,一个是从csv(C# 使用linq连接/合并具有不同列的两个对象,c#,linq,C#,Linq,我必须创建两个对象,一个是从csv(fileAuto,第一个)创建的,另一个是从datatable(dbAuto,第二个)创建的。两者都有count列 我想将多列和结果中的两个连接起来,包含第二列中与第一列不匹配的项,还包含count列和第一列中的项,并将其添加到列表中 我想我想使用。Except(),但我不知道如何使用比较器来比较多个列。我以为join可以工作,但是我得到一个错误,说join子句中的一个表达式不正确 我对Linq的理解比较松散,所以我不太确定如何实现这一点。我已经包含了后者的代
fileAuto,第一个
)创建的,另一个是从datatable(dbAuto,第二个
)创建的。两者都有count
列
我想将多列和结果中的两个连接起来,包含第二列中与第一列不匹配的项,还包含count
列和第一列中的项,并将其添加到列表中
我想我想使用。Except()
,但我不知道如何使用比较器来比较多个列。我以为join可以工作,但是我得到一个错误,说join子句中的一个表达式不正确
我对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
});
我还希望获得这些结果,并将这两个按dealercode分组的车辆计数相加,我已在下面列出。如果有人能告诉我,我是否在这些解决方案的正确轨道上,或者用一种更合适的方式来实现这一点,那就太好了
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)
};
}
在select子句中不需要
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
};