2014-01-29 30 views
0

我有一個這樣的動態Linq查詢。我需要將結果集轉換爲數組。但我無法將IQueryable類型轉換爲Array。任何建議?IQueryable類型到數組

我的代碼: -

var query = Data.AsEnumerable() 
       .AsQueryable() 
       .Select("new(it[\"Country\"] as Country)", "it") 
       .Take(10); 

foreach (string str in query) // **getting error Unable to cast object of type 'DynamicClass1' to type 'System.String** 
{ 

} 

我固定它使用這樣的: - 的foreach(詢問VAR STR)。

但我現在有另一個問題。我已經在查詢中添加了條件。現在我收到錯誤「類型'DataRow'」中沒有屬性或字段'Country'。 以下是我的查詢

var query= Data.AsEnumerable().AsQueryable().Where("Country = @0", "London").Select("new (Country as Country)"); 
+0

什麼是應該返回查詢?解釋'string str'的​​用途。 – Gabe

+1

'AsEnumerable()。AsQueryable()'似乎是個壞主意... – MarcinJuraszek

+0

謝謝你的答覆。我使用這樣的方式修復它: - foreach(var str in query)。但我現在有另一個問題。我已經在查詢中添加了條件。現在我得到錯誤「類型'DataRow'中沒有屬性或字段'國家'」。以下是我的查詢var query = Data.AsEnumerable()。AsQueryable()。Where(「Country = @ 0」,「London」)。Select(「new(Country as Country)」); – Dev

回答

1

當您使用Dynamic LINQ所有分機返回集合與dynamic元素,所以你需要改變你的代碼,例如這樣

foreach (dynamic str in query) 
{ 
    .... 
} 

也爲你的情況str是Field對象Country

UPDATE
從評論的問題
如果數據DataTable當你調用AsEnumerableAsQueryable你的DataRow收集工作,所以,當你想通過你需要使用的語法DataRow這樣

Data.AsQueryable().Where("it[\"Country\"] = @0", "London") 

,或者你可以列值過濾它不要選擇第一像

var query= Data.AsQueryable() 
       .Select("new (it[\"Country\"] as Country)") 
       .Where("Country = @0", "London") 

UPDATE2
直到你不指定FIEL類型d它可以Object,所以你需要改變Select條款這樣

.... 
.Select("new(Convert.ToString(it[\"Country\"]) as Country)") 
.... 
在當你調用 WhereSelectCountry意願 String這種情況下

,所以StringContains方法

+0

謝謝格蘭迪。它的工作.. :) – Dev

+0

另一個疑問。我已將查詢改爲var data = Data.AsEnumerable()。AsQueryable()。Select(「new(it [\」Country \「] as Country)」)。Where(「Country.Contains(@ 0)」, 「L」); 。現在我收到錯誤「沒有適用的方法'包含'存在於類型'對象'」中。任何幫助? – Dev

+0

我看到它應該工作http://stackoverflow.com/questions/2455659/how-to-use-contains-or-like-in-a-dynamic-linq-query。是否因爲我的數據也包含空記錄? – Dev