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



我有这个非常简单的Linq查询(.Dump()函数正在与LinqPad一起使用,以便查看结果):

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查询中。

谢谢。

编辑/澄清:"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")

//如果上面的结果为false,则向myArray列表中添加" 4 "(在这里添加新的数组元素)

相反,我想这样做:

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

在一个"select"中完成

这难道不可能吗?

谢谢。

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

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

没有一个真正干净的方法来使用,只是查询语法。查询语法只支持一小部分Linq操作符,union不是其中之一。

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

var myList = new List<string>
{
    "One", "Two", "Three"
};
var others = new List<string> {
    "Four"
};
var result = myList.Concat(others.Except(myList));
result.Dump();

相关内容

  • 没有找到相关文章

最新更新