使用 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" 中完成
这不可能吗?
谢谢。
您可以创建第二个要有条件地添加的项目列表,然后组合 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();
如果切换到方法语法,则可以使用Union
:
var result = myList.Union(new [] {"Four"});
使用 just 查询语法并没有真正干净的方法。查询语法仅支持一小部分 Linq 运算符,其中 union
不是一个。
我有这个非常简单的 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" 中完成这不可能吗?
谢谢。
您可以创建第二个要有条件地添加的项目列表,然后组合 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();
如果切换到方法语法,则可以使用Union
:
var result = myList.Union(new [] {"Four"});
使用 just 查询语法并没有真正干净的方法。查询语法仅支持一小部分 Linq 运算符,其中 union
不是一个。