2011-11-21 51 views
1

我是.NET新手。我試圖做一些非常簡單的事情。 我想執行在我的控制器模型的搜索和檢索的第一個實體返回:.NET MVC 3在控制器中搜索

var cercueils = from y in db.Cercueils select y; 
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper()) 
      || z.AncienType.ToUpper().Contains(dr[13].ToUpper())); 
Cercueil cercueil = cercueils.First(); 

但是這是不好的,因爲它拋出一個錯誤:

Le type de nœud « ArrayIndex » de l'expression LINQ n'est pas pris en charge dans LINQ to Entities. 

(谷歌翻譯:「LINQ表達式arrayIndex n的節點類型在LINQ to Entities中不受支持」)

我該如何做到這一點?

感謝您的幫助。

+2

可以轉換你從法國前往英國的錯誤建議FirstOrDefault?這將使它更易讀。 – Rob

+0

你可能會限制你的問題太多 - 這不像一個LINQ問題那麼多的MVC問題。 – iandotkelly

+0

Google翻譯:「LINQ表達式arrayIndex n的節點類型在LINQ to Entities中不受支持」 – iandotkelly

回答

3

相信的LINQ不知道如何執行的延遲執行的情況下「博士[13]」 ... 嘗試如下:

var tmp = dr[13].ToUpper(); 
var cercueils = from y in db.Cercueils select y; 
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(tmp) 
      || z.AncienType.ToUpper().Contains(tmp)); 
Cercueil cercueil = cercueils.FirstOrDefault(); 

而且,我通常事後空校驗:)

+0

感謝。它像一個魅力。 –

0

我認爲你的Where()子句(z => z.Type.ToUpper().Contains(dr[13].ToUpper())等)不能轉譯爲SQL型查詢,所以Linq to Entities會給你上述錯誤。

您可以修復TWI的方式錯誤:要麼改變你的表達,使LINQ到實體能夠生成查詢(我取得了一些成功IndexOf()代替Contains()),或者只是下載整個表,並執行搜索本地(顯然,第二個選項將阻礙性能):

var cercueils = (from y in db.Cercueils select y).ToList(); // load the entire dataset 
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper()) 
     || z.AncienType.ToUpper().Contains(dr[13].ToUpper())); 
Cercueil cercueil = cercueils.First(); 
0
 var cercueils = (from y in db.Cercueils 
         where y.blahblah = blahblah 
         select y).FirstOrDefault();