2012-12-18 101 views
2

我已經在使用實體框架遇到一個奇怪的場景中,「去哪兒」凡我可以搜索字符串,但不是一個字符串的是陣列的一部分:實體框架,異常引起的String []

這工作:

string line = sr.ReadLine(); 
string[] row = line.Split(';'); 
string code = row[0]; 
TableObject to = db.TableObject.Where(e => e.property == code).FirstOrDefault(); 

但是如果我試圖通過省略步驟串code = row[0]和做簡化代碼如下:

string line = sr.ReadLine(); 
string[] row = line.Split(';'); 
TableObject to = db.TableObject.Where(e => e.property == (string) row[0]).FirstOrDefault(); 

我得到以下EXCE ption:

System.NotSupportedException: The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities. 

我覺得strage該excepption抱怨數組看到,因爲我已經specificaly鑄row[0]數組作爲(string)

.ToString()也沒有解決問題。

我知道這沒什麼大不了的,但我很好奇爲什麼這樣。

回答

2

實體框架試圖將完整表達式e => e.property == (string) row[0]轉換爲SQL WHERE語句。它只是不知道用什麼SQL表達式將(string) row[0]轉換成。

每個LINQ提供者只能處理一組特定的指令。 EF LINQ提供程序不支持評估數組的索引。它只能使用基元。這就是爲什麼你必須從lambda之外的數組中提取字符串。

+0

好的,謝謝,我的方法是在lambda函數外部提取字符串令人滿意,還是有更正確的方法? – Chopo87

+0

你的方法非常好。只要確保你在lambda函數外提取字符串。 –

+0

感謝您的超級快速澄清 – Chopo87