我有这个非常简单的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
不是其中之一。
您可以创建第二个想要有条件添加的项目列表,然后将Except
和Concat
方法组合在一起:
var myList = new List<string>
{
"One", "Two", "Three"
};
var others = new List<string> {
"Four"
};
var result = myList.Concat(others.Except(myList));
result.Dump();