使用 Linq 表达式添加基于条件的列表元素

Add List Element Based on Conditional with Linq Expression

我有这个非常简单的 Linq 查询(LinqPad 正在使用 .Dump() 函数来查看结果):

void Main()
{
    var myList = new List<string>
    {
        "One", "Two", "Three"
    };


    var result = from o in myList
    select o;

    result.Dump();
}

如何将 if 语句注入到填充 result 的 Linq 查询中,以便它检查 "Four" 是否在列表中——如果不在,则添加它?我意识到有一些方法可以在 Linq 填充 result 后查看结果来执行此操作,但我想将此逻辑添加到单个 Linq 查询中。

谢谢。

EDIT/CLARIFICATION:"if" 逻辑需要在 Linq 查询中。这是骨架代码:

 var result = from o in myList
    select o
    [now add "four" if and only if it is not in the result]
    [now end the query and ensure `result` contains "one", "two", "three", and "four"];

第二次编辑: 我正在尝试在单个操作中查询并添加到列表中。顺便说一下,我做了这个非常简单的例子,而不是给出我试图处理的更复杂的场景,顺便说一句,所以我并不是在为如何向 List 对象添加新元素而苦苦挣扎。 :)

所以这就是我要做的事情:

//查询列表,看"four"是否在列表中 (Linq 查询在此处检查 "four")

// 如果上面的结果为假则将 "four" 添加到 myArray 列表 (在这里添加新的数组元素)

相反,我想执行以下操作:

// 查询列表中的内容,如果不在列表中则添加 "four"。 // 所有这些都需要使用 Linq

在一个 "select" 中完成

这不可能吗?

谢谢。

您可以创建第二个要有条件地添加的项目列表,然后组合 ExceptConcat 方法:

var myList = new List<string>
{
    "One", "Two", "Three"
};

var others = new List<string> {
    "Four"
};

var result = myList.Concat(others.Except(myList));

result.Dump();

如果切换到方法语法,则可以使用Union

var result = myList.Union(new [] {"Four"});

使用 just 查询语法并没有真正干净的方法。查询语法仅支持一小部分 Linq 运算符,其中 union 不是一个。