【发布时间】:2016-12-06 22:46:39
【问题描述】:
我正在尝试将客户主列表与另一个客户列表合并。对于每个客户,如果值已经存在(非空),我想保留主输入列表中的值,否则将其替换为另一个列表中的相应值。
类似这样的:
public class Customer
{
public int ID { get; set; }
public string Card_ID { get; set; }
public decimal? Cash { get; set; }
}
var masterlist = new List<Customer>()
{
new Customer() { ID = 1, Cash = 25 },
new Customer() { ID = 2, Card_ID = "card2" }
};
var existinglist = new List<Customer>()
{
new Customer() { ID = 1, Card_ID = "card1" },
new Customer() { ID = 2, Card_ID = "card12222222222", Cash = 27 }
};
var mergedlist = (from a in masterlist
from b in existinglist
where a.ID == b.ID
select new
{
ID = a.ID,
Card_ID = (a.Card_ID == null ? b.Card_ID : a.Card_ID),
Cash = a.Cash.HasValue ? a.Cash : b.Cash
}).ToList();
合并列表中的预期结果是这样的:
{ ID = 1, Card_ID = "card1", Cash = 25 }
{ ID = 2, Card_ID = "card2", Cash = 27 }
现在我的意思是,我的实体中有 50 多个属性。有没有比在我的select 子句中手动编码所有 50 个条件更简单的方法来进行合并?
【问题讨论】:
-
您至少可以将其缩短为
Card_ID = a.Card_Id ?? b.Card_Id。