2010-12-16 39 views
0

我使用Linq從數據表中選擇數據。選擇將是一個列和要求是功能應返回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

感謝Oded,我很抱歉,我不太瞭解lambda表達式和Linq。請指導我應該使用此代碼的位置?謝謝你一次。 – haansi 2010-12-16 10:53:08

+0

@haansi - 我只寫了你函數的最後一個return語句。 – Oded 2010-12-16 10:53:49

+0

這裏的Oded是一個錯誤:錯誤'System.Data.EnumerableRowCollection '不包含'ToArray'的定義,並且沒有找到接受類型'System.Data.EnumerableRowCollection '的第一個參數的擴展方法'ToArray'你是否缺少使用指令或程序集引用?) – haansi 2010-12-16 11:04:15

0

我不知道ToArray存在從查詢得到的對象,但如果這樣做,你可以嘗試:

return details.ToArray(); 

如果不行試試先創建它的列表:

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

在什麼情況下會需要'details.ToList()。ToArray()'解決方法?不是說你錯了,但我想不出任何。 – Ani 2010-12-16 10:53:14

+0

我不確定IEnumerable是否具有'ToArray'擴展名......但最有可能的。 – 2010-12-16 11:50:20