如何修改对象取决于linq中的连接条件

时间:2019-04-07 11:11:55

标签: c# linq

我有一个对象列表和一个整数列表。对象具有称为exist的属性。

public bool exists;

我需要使用左联接来联接这两个列表,并且如果两个列表中都存在ID,则将“ exists”属性设置为true;

我预备了dotnetfiddle示例:

https://dotnetfiddle.net/sE1RIl

预期结果是(伪代码):

Item1.exists = true;
Item2.exists = true;
Item3.exists = false;

可能以后我需要添加更多的左联接,所以我对实现这一目标的最灵活方式感兴趣。

1 个答案:

答案 0 :(得分:1)

您可以使用select语句映射属性:

IEnumerable<Item> items = new List<Item>()
{
    new Item (){id =1, name = "Item1"},
    new Item (){id =2, name = "Item2"},
    new Item (){id =3, name = "Item3"}
};
List<int> ids = new List<int>() {1,2};

var param_1 = true;
var param_2 = false;
var param_3 = true;

var listOfItems = from item in items
    join id in ids on item.id equals id
    into result
    from r in result.DefaultIfEmpty()
    select new Item
    {
        id = item.id,
        name = item.name,
        exists = (param_1 == true) ? true
            : (param_2 == false && param_3 == true) ? false 
                                                    : true
    };