如何使用Linq组合字符串和列表?

时间:2018-05-30 01:01:31

标签: c# linq

新手linq用户,但是prim_clus_list& ref_clus_list是List和ref_clus& prim_clus是字符串。我尝试执行以下操作,但它无法正常工作。

string[] clus_list = prim_clus_list.Union(ref_clus_list).Union(ref_clus.ToList()).Union(prim_clus.ToList()).ToArray<string>();

如何在一行中完成此操作?我希望他们都在一个列表中,没有重复。

CS1928:&#39; System.Collections.Generic.IEnumerable&#39;不包含&#39; Union&#39;的定义和最好的扩展方法重载&#39; System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)&#39;有一些无效的论点

此外,这一切正常:

string[] clus_list = prim_clus_list.Union(ref_clus_list).ToArray<string>();

2 个答案:

答案 0 :(得分:2)

使用.Append方法将单个项目追加到IEnumerable

var result = prim_clus_list.Append(ref_clus)
                           .Append(prim_clus)
                           .Union(ref_clus_list)
                           .ToArray();

Union放在链的末尾以摆脱重复。

Enumerable.Append(IEnumerable, TSource) Method

答案 1 :(得分:0)

这就是你需要的:

var prim_clus_list = new List<string>() { "A", "B" };
var ref_clus_list = new List<string>() { "C", "D" };
var ref_clus = "E";
var prim_clus = "F";

string[] clus_list =
    prim_clus_list
        .Union(ref_clus_list)
        .Union(new [] { ref_clus })
        .Union(new [] { prim_clus })
        .ToArray<string>();

这给出了:

A 
B 
C 
D 
E 
F 

基本上ref_clus.ToList()会返回List<char>,但new [] { ref_clus }会返回IEnumerable<string>,可以与.Union一起使用。