我将使用一些基本的精简示例来说明我的问题。
我有一堂课:
class Item
{
int ID;
bool Selected;
}
现在假设我有两个Item
班级列表:
List<Item> ListA = GetListA();
List<Item> ListB = GetListB();
现在我想创建第三个列表,其中包含来自ListB
. 重要的是,如果在中ID
找到匹配项(相同),ListA
那么我想使用该Selected
值,否则我想保留在Selected
中的项目的值ListB
。
我正在创建第三个列表,如下所示:
List<Item> ListC = from item in ListB
select new Item
{
ID = item.ID,
Selected = item.Selected// <-- should use value form ListA if available
};
重要提示:我不想显得无知,但我不想改变ListC
创建方式。我的意思是我想使用“linq select”方法,并且我想使用一个分配Selected
值的“one liner”......我知道还有其他方法可以创建可以正常工作的列表,但是我不会学到任何新东西。
到目前为止,我已经尝试了几件事......
我知道这会起作用,但我不想查询ListA
两次:
Selected = ListA.Any(x => x.ID == item.ID) ? ListA.First(x => x.ID == item.ID).Selected : item.Selected
我也尝试过使用DeafultIfEmpty
,但我认为这不是这种情况的正确想法......因为它不起作用,而且如果它是ListA
空的,它似乎更有用(我不在乎)