1

如何合并这两个集合?

问题:当一个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);  

尝试从 PM 列表中删除 Test2 并从 listOfPM2 中删除 Test1 并获得:

“xxx.Tab24PresentationModel”类型出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中。可以在同一个查询中的两个位置初始化一个类型,但前提是在两个位置都设置了相同的属性并且这些属性以相同的顺序设置。

我可以想办法使用多个 foreach 来解决这个问题。想使用 Linq!

4

2 回答 2

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,仅当您不希望Test1 = null, Test2 = value仅存在 gbc2 时才有效。如果这不是问题,你应该没问题。

于 2013-04-02T17:35:50.297 回答
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);
    }
}
于 2013-04-03T09:48:37.583 回答