用LINQ将select中两列的结果合并到一个数组中?
Posted
技术标签:
【中文标题】用LINQ将select中两列的结果合并到一个数组中?【英文标题】:Combine the results of two columns in a select into one array with LINQ? 【发布时间】:2012-08-01 20:30:01 【问题描述】:基本上,我希望选择两个字符串列并将其全部放入单个字符串数组中。现在我必须做两次选择并结合结果。这不是什么大不了的事,我只是觉得它看起来很尴尬。关于如何使用一个 linq 语句实现相同目标的任何建议?这是我用来乱七八糟的测试用例:
[TestFixture]
public class test
public class Values
public string Present get; set;
public string Previous get; set;
public bool Flag get; set;
[Test]
public void test1()
var list = new List<Values>
new Values Present = "present1", Previous = "previous1", Flag = false ,
new Values Present = "present2", Previous = "previous2", Flag = false ,
new Values Present = "present3", Previous = "previous3", Flag = true ,
new Values Present = "present4", Previous = "previous4", Flag = true
;
var r1 = list.Where(c => c.Flag).Select(c => c.Present);
var r2 = list.Where(c => c.Flag).Select(c => c.Previous);
var combined = r1.Concat(r2);
Assert.AreEqual(4, combined.Count());
【问题讨论】:
清晰漂亮,看不出有什么理由在这里老老实实改。 您的断言将失败,因为.Union()
删除了重复项。也许你想要.Concat()
?
我不知道 .Union() 删除重复项。
【参考方案1】:
使用SelectMany
的替代解决方案(它保留重复项):
var combined = list.Where(c => c.Flag)
.SelectMany(c => new[] c.Present, c.Previous );
Assert.AreEqual(4, combined.Count());
【讨论】:
这很有趣。这给了我想要的结果,但不是我所期望的。我以为它会给我组合。Count() == 2。猜不出来。 SelectMany 基本上将给定的多个集合“扁平化”为一个集合。【参考方案2】:列表中字符串的最终排序是否重要?如果没有,这似乎是完成此任务的最清晰方法:
var strings = new List<String>();
foreach (var value in list.Where(c => c.Flag))
strings.Add(value.Present);
strings.Add(value.Previous);
【讨论】:
以上是关于用LINQ将select中两列的结果合并到一个数组中?的主要内容,如果未能解决你的问题,请参考以下文章
sql server 中有一张表,我想把表中两列的数据合并后插入本表中另一列!请问怎么实现
将函数应用于 Pandas.DataFrame 中两列的每个组合的更好方法