2011-11-21 79 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();