是否存在字符串的LINQ等效项,Join(string,string[])[duplicate]

nfg76nw0  于 2022-12-06  发布在  其他
关注(0)|答案(4)|浏览(120)

此问题已存在

What is the LINQ way to implode/join a string array? [duplicate]
八年前就关门了。
是否有任何方法可以使用LINQ将对象集合转换为单个新对象?
我想在另一个LINQ to SQL表达式中使用它。

clj7thdc

clj7thdc1#

为什么不使用string.Join本身?

string.Join("<br/>", collection.Select(e => e.TextProp));
rqqzpn5f

rqqzpn5f2#

您可以使用Aggregate方法...

var myResults = (from myString in MyStrings
                 select myString)
                .Aggregate(string.Empty, (results, nextString) 
                   => string.Format("{0}<br />{1}", results, nextString));

var myResults = MyStrings.Aggregate(string.Empty, (results, nextString) 
                   => string.Format("{0}<br />{1}", results, nextString));
kkbh8khc

kkbh8khc3#

通常的方法是使用其中一个聚合运算符(AggregateSumAverage等),但这完全取决于类型和您要执行的操作。您感兴趣的类型是什么?
编辑:好的,你想连接字符串...我不认为LINQ to SQL本身有任何东西可以做到这一点。选项:

  • 编写存储过程或TVF以便在SQL中执行此操作
  • 在LINQtoSQL中获取各个字符串,并在客户端连接回来
xu3bshqb

xu3bshqb4#

如果你有大量的值要连接,这里的大多数解决方案都是相当低效的。而且,它们也不是那么可读。如果你要经常做这类事情,那么值得构建你自己的扩展方法来完成它。下面的实现允许你做string.Join(", ", arrayOfStrings)的等价物,其中arrayOfStrings可以是IEnumerable<T>,和separator可以是任何对象。它允许你这样做:

var names = new [] { "Fred", "Barney", "Wilma", "Betty" };
var list = names
    .Where(n => n.Contains("e"))
    .Join(", ");

我喜欢的两点是:
1.它在LINQ环境中可读性很强。
1.它非常高效,因为它使用StringBuilder,并避免了对枚举进行两次求值,这在数据库场景(L2S、L2E或L2Nh)中非常重要。

public static string Join<TItem,TSep>( 
    this IEnumerable<TItem> enuml, 
    TSep                    separator) 
{ 
    if (null == enuml) return string.Empty; 

    var sb = new StringBuilder(); 

    using (var enumr = enuml.GetEnumerator()) 
    { 
        if (null != enumr && enumr.MoveNext()) 
        { 
            sb.Append(enumr.Current); 
            while (enumr.MoveNext()) 
            { 
                sb.Append(separator).Append(enumr.Current); 
            } 
        } 
    } 

    return sb.ToString(); 
}

相关问题