如何合并这两个系列?
问题:当ApplicationID在listOfPM和listOfPM2中时,Test2为null并且应该是数字
var listOfPM = from d in gbc
select new Tab24PresentationModel
{
ApplicationID = d.ApplicationID,
ApplicationName = d.ApplicationName,
Test1 = d.count,
Test2 = null
};
var listOfPM2 = from d in gbc2
select new Tab24PresentationModel
{
ApplicationID = d.ApplicationID,
ApplicationName = d.ApplicationName,
Test1 = null,
Test2 = d.count
};
var result = listOfPM.Union(listOfPM2);
尝试从listOfPM2中的PM和Test1列表中删除Test2并获取:
类型'xxx.Tab24PresentationModel'出现在单个LINQ to Entities查询中的两个结构不兼容的初始化中。可以在同一查询中的两个位置初始化类型,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。
我可以想办法使用多个foreach ...想使用Linq!
答案 0 :(得分:0)
您需要手动合并这两个对象(使用相同的ApplicationID),无法解决这个问题。
编辑 - 试试这个:
var list = gbc.Union( gbc2 ).ToLookup( d => d.ApplicationID ).Select( g =>
{
var first = g.First();
var retVal = new Tab24PresentationModel
{
ApplicationID = first.ApplicationID,
ApplicationName = first.ApplicationName,
Test1 = first.count,
Test2 = null
};
var second = g.Skip(1).Take(1).SingleOrDefault();
if( null != second )
{
retVal.Test2 = second.count;
}
return retVal;
} );
编辑2:hrm,只有当只有gbc2存在时你不想要Test1 = null, Test2 = value
时才会有效。如果这不是问题,你应该没问题。
答案 1 :(得分:0)
非常感谢您的回答和评论 - 这就是我想出来的。
// take each list in turn and either add or update
var result = new List<Tab24PresentationModel>();
foreach (var t in listOfPM)
{
var a = new Tab24PresentationModel
{
ApplicationID = t.ApplicationID,
ApplicationName = t.ApplicationName,
Test1 = t.Test1
};
result.Add(a);
}
// list2
foreach (var t in listOfPM2)
{
// is this already in result
if (result.Any(x => x.ApplicationID == t.ApplicationID))
{
var existing = result.First(x => x.ApplicationID == t.ApplicationID);
existing.Test2 = t.Test2;
}
else
{
var a = new Tab24PresentationModel
{
ApplicationID = t.ApplicationID,
ApplicationName = t.ApplicationName,
Test2 = t.Test2
};
result.Add(a);
}
}