【问题标题】:linq ToArray<string>().Join(...) method is not working?linq ToArray<string>().Join(...) 方法不起作用?
【发布时间】:2012-02-05 22:03:54
【问题描述】:

我有一个带有one 列的数据表

我想用包装器 div 连接每个文件名

类似:

    <div>File Attached : file1 </div>
    <div>File Attached : file2 </div>
    <div>File Attached : file3 </div>
...

我成功了:

 string f = String.Join(" ", (from dr in dt.AsEnumerable()
                                                 select "<div>File Attached : " + dr[0].ToString() + "</div>").ToArray<string>());

没有成功:

http://i.stack.imgur.com/xCKLD.jpg

ToArray 方法之后如何使用.Join 方法?

【问题讨论】:

  • .Join() 方法相当于 SQL JOIN 语句。您需要 .Aggregate() 来完成此操作。

标签: c# linq


【解决方案1】:

Join 与您发现的String.Join 不同。 Enumerable.Join 像加入数据库一样工作(但仍然在本地对象上,Queryable.Join 与 SQL 一起工作。)这里给出了一个例子:

http://msdn.microsoft.com/en-us/library/bb534675.aspx

您可以(但我推荐它,因为它对用户来说是模棱两可的)编写这样的扩展方法:

public static class StringExtensions
{
    public string Join(this IEnumerable<string> source, string sep)
    {
        return string.Join(sep, source.ToArray()); // You can erase `.ToArray()` if you're using .Net 4
    }
}

然后它将与 (...).Join(" ") 一起使用。

我的解决方案:(4.0)

var query = from dr in dt.AsEnumerable() // You may be able to erase `AsEnumerable` depending on your source
            select "<div>File Attached : " + dr[0] + "</div>";
var f = string.Join(" ", query);

我的解决方案:(3.5)

var arr = dt.AsEnumerable()
            .Select(dr => "<div>File Attached : " + dr[0] + "</div>")
            .ToArray();
var f = string.Join(" ", arr);

【讨论】:

  • oh sh*t 是 linq 的 sql join 吗?
  • @RoyiNamir:是的,要使用 LINQ 获得相同的结果,您应该使用 .Aggregate(...),但它比 string.Join 更困难且不太清晰
  • 是的,Aggregate 在另一个答案中给出的天真的 + 解决方案效率低下。 始终使用string.Join
  • @lasseespeholt ,可以,但是 Array 类型没有自己的 Join 方法吗?
  • @RoyiNamir 不,见stackoverflow.com/questions/484464/array-join-in-netJoin 只是一种扩展方法。
【解决方案2】:

您确定 Join 函数是正确的吗?听起来您可以使用 Aggregate 函数来获得相同的结果,如下所示:

dt.AsEnumerable().Aggregate(string.Empty, (x,y) => x + string.Format("<div>File Attached : {0} </div>", y));

【讨论】:

  • OK 但是Array类型没有自己的Join方法吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2013-02-08
  • 2012-07-28
  • 2014-05-06
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多