将列表值拆分为逗号分隔的字符串

本文关键字:分隔 字符串 列表 拆分 | 更新日期: 2023-09-27 17:50:26

我从下面的数据表列中选择不同的值。

var uniqueCC = dtNew.AsEnumerable().Select(s => new { cc = s.Field<string>("ID"), }).Distinct().ToList();
var uniqueCode = dtNew.AsEnumerable().Select(s => new { Code = s.Field<string>("EAI"), }).Distinct().ToList();

现在我需要在逗号分隔的字符串中单独获取值,我使用下面的代码,它不单独获取值。

string strCC = String.Join(",", uniqueCC);
string strEAI = String.Join(",", uniqueCode);

请提供一些建议。

列表值

cc=1, cc=2, cc=3

预期的结果

1,2,3

将列表值拆分为逗号分隔的字符串

您可以使用LINQ Select()方法将值单独传递给String.Join():

string strCC = String.Join(",", uniqueCC.Select(o => o.cc));

或者直接返回字符串值而不是匿名类型:

var uniqueCC = dtNew.AsEnumerable().Select(s => s.Field<string>("ID")).Distinct();
string strCC = String.Join(",", uniqueCC);

您可以使用c#中可用的aggregate函数。

假设您有一个名为listOfString的字符串列表,那么您可以像这样调用聚合函数。

string outString = listOfString.Aggregate((a, b) => a + "," + b);

作为har07出色答案的扩展,如果这是您经常做的事情,为了节省编写大量代码的时间,您可以将其实现为静态扩展方法,在其中传递数据类型,列名和所需的分隔符-因此它可以处理不同的列数据类型和分隔符-在单独的文件中:

namespace Extensions
    {
        public static class LinqExtensions
        {
            public static String ReturnSeparatedString<T>(this DataTable datatable, string field, string separator)
            {
                var unique =
                    datatable.AsEnumerable()
                        .Select(s => new {cc = s.Field<string>(field),}).Distinct();
                return String.Join(separator, unique.Select(o => o.cc));
            }
    }
}

然后通过创建对新扩展的引用从代码中调用它。LinqExtensions类,并像这样直接在dataTable上调用它:

    var commaSeparatedIds = dataTable.ReturnSeparatedString<string>("ID",",");
    var commaSeparatedEAIs = dataTable.ReturnSeparatedString<string>("EAI",",");
    var commaSeparatedInts = dataTable.ReturnSeparatedString<int>("MYINTS",",");
    var dotSeparatedStrings = dataTable.ReturnSeparatedString<int>("OtherId", ".");