string.Contains with Linq To Sql返回Null异常

时间:2009-10-26 23:42:25

标签: asp.net asp.net-mvc linq-to-sql

我的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,ReadOnlyCollection 1 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,IDictionary 2 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:

1 个答案:

答案 0 :(得分:1)

尝试删除!= ""比较,并确保您传递的参数不为空:

PROJETS = PROJETS.Where(p => (p.VilleArrive != null) &&
                             (alerte.VilleArrive != null) &&
                              p.VilleArrive.Contains(alerte.VilleArrive));