2012-01-09 35 views
1

我有一個datatble與onelinq ToArray <string>().Join(...)方法不起作用?

我想Concat的與包裝的div

像每個文件名:

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

我已經succedded有:

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 enter image description here

我怎麼能與這樣做。 Join方法後ToArray方法?

+0

。加入()方法等於SQL JOIN語句。你需要.Aggregate()來完成這個。 – Alex 2012-01-09 10:58:50

回答

2

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); 
+0

哦sh * t,它是linq的sql連接嗎? – 2012-01-09 10:56:08

+0

@RoyiNamir:是的,爲了使用LINQ得到相同的結果,你應該使用'.Aggregate(...)',但它比'string.Join'更加困難和不太清晰' – digEmAll 2012-01-09 10:57:45

+0

是的,'Aggregate'效率低天真的'+'解決方案在另一個答案中給出。 **總是使用'string.Join'。** – 2012-01-09 11:00:41

1

你肯定的是,加入的功能是正確的?這聽起來像你可能會使用Aggregate功能具有相同的結果結束了,像這樣:

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

好,但沒有數組類型有他自己的聯接方法? – 2012-01-09 11:01:32