2012-01-09 5 views
1

私は私のようなラッパーのdivlinq ToArray <string>().Join(...)メソッドが機能していませんか?

何かで各ファイル名をCONCATしたいone

とdatatbleあります

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

しかし:私はsucceddedいる

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

で成功しなかった:

私はそれを行うことができますどのよう

http://i.stack.imgur.com/xCKLD.jpg enter image description here

ToArrayメソッドの後のJoinメソッド?

+0

.Join()メソッドは、SQLに等しいJOINステートメント:あなたはこのように、同じ結果に終わるためにAggregate機能を使用することができように聞こえます。これを達成するには、.Aggregate()が必要です。 – Alex

答えて

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

oh sh * t、それはlinqのsql joinですか? –

+0

@RoyiNamir:LINQを使って同じ結果を得るには、 '.Aggregate(...)'を使うべきですが、 'string.Join'より難しく、明確ではありません – digEmAll

+0

はい、' Aggregate'は非効率的です。別の答えで与えられている単純な '+'解です。 **常に 'string.Join'を使用してください。** –

1

ていますか?

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

OKですが、配列型には独自のJoinメソッドがありますか? –

関連する問題