我的Linq To Sql查询
PROJETS = PROJETS.Where(p => (p.VilleArrive != "" && p.VilleArrive != null) && p.VilleArrive.Contains(alerte.VilleArrive));
就像这样翻译
SELECT * // (many columns)
FROM [dbo].[cov_Projet] AS [t0]
WHERE ([t0].[VilleArrive] <> @p0) // city != ""
AND ([t0].[VilleArrive] IS NOT NULL) // city != null
AND ([t0].[VilleArrive] LIKE @p1) // city.contains(alert.city)
ORDER BY [t0].[DateDebut]
当我手动运行到sql server时,它执行得很好。但它在由linq执行时返回ArgumentNullException异常。 实际上,测试过的“VilleArrive”(“city”)专栏永远不会为空,但总是一个空字符串
我真的不明白为什么会追加。 我的问题看起来像这个LINQ to SQL and Null strings, how do I use Contains? 但答案不适用于我。
“LIKE”关键字似乎调用了Linq.SqlClient.SqlHelpers.GetStringContainsPattern(String text,Char escape)
感谢您的帮助,对不起我的英语。
这里的堆栈跟踪我的项目是ASP MVC 1.0项目
System.ArgumentNullException是 用户代码未处理消息=“La valeur ne peutpasêtrenull。\ r \ nNom duparamètre:text“
来源= “将System.Data.Linq”
ParamName =“text”StackTrace: àSystem.Data.Linq.SqlClient.SqlHelpers.GetStringContainsPattern(String 文字,Char逃脱) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.TranslateStringMethod(SqlMethodCall MC) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitMethodCall(SqlMethodCall MC) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression EXP) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitBinaryOperator(SqlBinary BO) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitBinaryOperator(SqlBinary BO) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression EXP) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitSelect(SqlSelect 选择) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias 一个) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 资源) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitSelect(SqlSelect 选择) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitUnion(SqlUnion 苏) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitAlias(SqlAlias 一个) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource 资源) àSystem.Data.Linq.SqlClient.SqlVisitor.VisitSelectCore(SqlSelect 选择) àSystem.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitSelect(SqlSelect 选择) àSystem.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) àSystem.Data.Linq.SqlClient.SqlProvider.BuildQuery(ResultShape resultShape,输入resultType,SqlNode node,ReadOnlyCollection1 parentParameters, SqlNodeAnnotations annotations) à System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations) à System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.GetQueryText(Expression query) à System.Data.Linq.DataQuery
1.ToString() àcovCake.Services.ProjetAlerts.RetrieveProjectsByUsers(布尔值 UpdateAlerts)dans d:\ AspProject \ covCake \ covCake \ SERVICES \ ProjetAlerts.cs:LIGNE 111 àcovCake.Controllers.AlertesController.SendAlertEmail(String p)dans d:\ AspProject \ covCake \ covCake \ \控制器AlertesController.cs:LIGNE 152 àlambda_method(ExecutionScope,ControllerBase,Object []) àSystem.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object []参数) àSystem.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters) à System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数) àSystem.Web.Mvc.ControllerActionInvoker。&lt;&gt; c__DisplayClassa.b__7() àSystem.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter) 过滤器,ActionExecutingContext preContext,Func`1 continuation)
的InnerException:
答案 0 :(得分:1)
尝试删除!= ""
比较,并确保您传递的参数不为空:
PROJETS = PROJETS.Where(p => (p.VilleArrive != null) &&
(alerte.VilleArrive != null) &&
p.VilleArrive.Contains(alerte.VilleArrive));