C# .NET MVC 3在控制器中搜索

C# .NET MVC 3在控制器中搜索,c#,asp.net-mvc,asp.net-mvc-3,linq,linq-to-entities,C#,Asp.net Mvc,Asp.net Mvc 3,Linq,Linq To Entities,我不熟悉.NET。我正在尝试做一些非常简单的事情。 我想在控制器中的模型上执行搜索,并检索返回的第一个实体: 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())); C

我不熟悉.NET。我正在尝试做一些非常简单的事情。 我想在控制器中的模型上执行搜索,并检索返回的第一个实体:

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.
(Google translate:“LINQ to实体中不支持LINQ表达式arrayIndex n的节点类型”)

我怎样才能做到这一点

感谢您的帮助。

我认为您的
Where()
子句(
z=>z.Type.ToUpper().Contains(dr[13].ToUpper())
等)无法转换到SQL类型查询中,因此Linq to Entities会给您提供上述错误

您可以通过两种方式修复错误:要么转换表达式,使Linq to Entities能够生成查询(我成功地使用了
IndexOf()
而不是
Contains()
),要么下载整个表并在本地执行搜索(显然,第二个选项会影响性能):


我相信Linq不知道如何在延迟执行的情况下执行“dr[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();

另外,我通常建议在FirstOrDefault之后使用空检查:)

您能将您收到的错误从法语翻译成英语吗?这将使其更易于阅读。您可能对您的问题限制过多-这与其说是一个MVC问题,不如说是一个LINQ问题。Google translate:“LINQ to Entities中不支持LINQ表达式arrayIndex n的节点类型”
        var cercueils = (from y in db.Cercueils
                        where y.blahblah = blahblah
                        select y).FirstOrDefault();
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();