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