2010-12-16 26 views
0

私はLinqを使ってDatatableからデータを選択しています。選択は列になり、関数はstring[]を返す必要があります。私はstring[]に変換結果を行う方法を取得していません。Linqの結果を文字列[]に変換する方法は?

私のコードで以下、案内してください:

public string[] GetCompletionList(string prefixText) 
{ 
    if (HttpContext.Current.Cache["Dir"] == null) 
    { 
    return null; 
    } 

    DataTable dt = (DataTable)HttpContext.Current.Cache["Dir"]; 
    var details = from addresses in dt.AsEnumerable() 
     where SqlMethods.Like(prefixText, prefixText + "%") || SqlMethods.Like(prefixText, "%" + prefixText + "%") 
     select addresses["Details"]; 



    return details.tol; 

} 

答えて

4

detailsの各項目がすでに文字列である場合は、単にIEnumerable<T>.ToArray()を使用します。

return details.ToArray(); 

あなたは私の例では(最初にそれを変換する必要がある場合ToString()を使用しています)、Selectを使用して各項目を文字列に投影できます。

return details.Select(x => x.ToString()).ToArray(); 
+0

おかげさまで、おめでとうございます。私はラムダ式とLinqについてあまり気づいていません。このコードをどこで使うべきですか?一度agianに感謝します。 – haansi

+0

@haansi - あなたの関数の最後のreturn文しか書いていません。 – Oded

+0

エラー 'System.Data.EnumerableRowCollection 'に 'ToArray'の定義がなく、 'System.Data.EnumerableRowCollection '型の最初の引数を受け入れる拡張メソッド 'ToArray'が見つかりませんでした( usingディレクティブまたはアセンブリ参照がありませんか?) – haansi

0

私はToArrayは、クエリからの結果のオブジェクトに存在しますが、それがない場合は、試みることができることを確認していない:

return details.ToArray(); 

問題が解決しない場合は、最初にリストを作成してみてください:

return details.ToList().ToArray(); 
+2

'details.ToList().ToArray()'の回避策がどのようなシナリオで必要でしょうか?あなたが間違っていると言っているわけではありませんが、私は考えることはできません。 – Ani

+0

IEnumerableに 'ToArray'拡張子が付いているかどうかはわかりませんが、もっともらしいです。 –

関連する問題