【发布时间】:2013-12-11 19:39:55
【问题描述】:
我在网上搜索了这段代码,合并了几个列表并返回一个。如果所有属性都是字符串,则代码有效,但如果某些属性是双精度的,我会收到错误消息。这个错误是“操作员'??'不能应用于“双”和“双”类型的操作数”。任何帮助是极大的赞赏。谢谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
List<Project> lst1; List<Project> lst2; List<Project> lst3;
lst1 = new List<Project>
{
new Project { ProjectId = 1, ProjectName = "P1" },
new Project { ProjectId = 2, ProjectName = "P2" },
new Project { ProjectId = 3, ProjectName = "P3" }
};
lst2 = new List<Project>
{
new Project { ProjectId = 1, CustomerNum = 1},
new Project { ProjectId = 2, CustomerNum = 2},
new Project { ProjectId = 3, CustomerNum = 3}
};
lst3 = new List<Project>
{
new Project { ProjectId = 1, Address = 10},
new Project { ProjectId = 2, Address = 20},
new Project { ProjectId = 3, Address = 30}
};
List<Project> lst = lst1.Union(lst2).Union(lst3).ToLookup(x => x.ProjectId).Select(x => new Project()
{
ProjectId = x.Key,
ProjectName = x.Select(y => y.ProjectName).Aggregate((z1, z2) => z1 ?? z2),
CustomerNum = x.Select(y => y.CustomerNum).Aggregate((z1, z2) => z1 ?? z2),
Address = x.Select(y => y.Address).Aggregate((z1, z2) => z1 ?? z2)
}).ToList();
foreach (var item in lst)
{
Console.WriteLine("{0}, {1}, {2}, {3}", item.ProjectId, item.ProjectName, item.CustomerNum, item.Address);
}
}
}
public class Project
{
public int ProjectId { get; set; }
public string ProjectName { get; set; }
public double CustomerNum { get; set; }
public double Address { get; set; }
}
}
【问题讨论】: