linq 将IEnumerable转换为用逗号分隔的字符串?

pwuypxnk  于 2023-03-05  发布在  其他
关注(0)|答案(7)|浏览(184)

我有一个DataTable,它返回

IDs
,1
,2
,3
,4
,5
,100
,101

我想把它转换成单个字符串值,即:

,1,2,3,4,5,100,101

如何重写以下代码以获得单个字符串

var _values = _tbl.AsEnumerable().Select(x => x);
hrirmatl

hrirmatl1#

var singleString = string.Join(",", _values.ToArray() );
k3fezbri

k3fezbri2#

编写扩展方法,如

public static String AppendAll(this IEnumerable<String> collection, String seperator)
{
    using (var enumerator = collection.GetEnumerator())
    {
        if (!enumerator.MoveNext())
        {
            return String.Empty;
        }

        var builder = new StringBuilder().Append(enumerator.Current);

        while (enumerator.MoveNext())
        {
            builder.Append(seperator).Append(enumerator.Current);
        }

        return builder.ToString();
    }
}

并假设前面表达式的结果是IEnumerable,调用:

var _values = _tbl.AsEnumerable().Select(x => x).AppendAll(String.Empty);
gcuhipw9

gcuhipw93#

String.Join(
      ",",
      _tbl.AsEnumerable()
          .Select(r => r.Field<int>("ID").ToString())
          .ToArray())
agyaoht7

agyaoht74#

试试这个:

var _values = _tbl.AsEnumerable().Select(x => x);
string valueString = _values.ToList().Aggregate((a, b) => a + b);
ou6hu8tu

ou6hu8tu5#

您可以使用MoreLINQ扩展

var singleString = _values.ToDelimitedString(",");
myss37ts

myss37ts6#

我在使用一般Array类型时遇到了类似的问题,我解决了它,如下所示

string GetMembersAsString(Array array)
{
    return string.Join(",", array.OfType<object>());
}

请注意,调用OfType<object>()是必需的。

whhtz7ly

whhtz7ly7#

你可以这样作弊:

String output = "";
_tbl.AsEnumerable().Select(x => output += x).ToArray(); 
// output now contains concatenated string

注意,强制执行查询需要ToArray()或类似命令。
另一个选择是

String output = String.Concat(_tbl.AsEnumerable().Select(x=>x).ToArray());

相关问题