【问题标题】:string.Contains with Linq To Sql return an Null exceptionstring.Contains 与 Linq To Sql 返回 Null 异常
【发布时间】:2010-12-10 07:41:37
【问题描述】:

我的 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 是 用户代码未处理 Message="La valeur ne peut pas être null。\r\nNom du paramètre:文本"
来源="System.Data.Linq"
参数名称=“文本”堆栈跟踪: à System.Data.Linq.SqlClient.SqlHelpers.GetStringContainsPattern(字符串 文本,字符转义) à System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.TranslateStringMethod(SqlMethodCall 麦克) à System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitMethodCall(SqlMethodCall 麦克) à System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) à System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression 经验) à System.Data.Linq.SqlClient.SqlVisitor.VisitBinaryOperator(SqlBinary 博) à System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitBinaryOperator(SqlBinary 博) à System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) à System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression 经验) à 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 节点,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.DataQuery1.ToString() à covCake.Services.ProjetAlerts.RetrieveProjectsByUsers(布尔 UpdateAlerts) dans D:\AspProject\covCake\covCake\Services\ProjetAlerts.cs:ligne 111 à covCake.Controllers.AlertesController.SendAlertEmail(字符串 p) 丹斯 D:\AspProject\covCake\covCake\Controllers\AlertesController.cs:ligne 152 à lambda_method(ExecutionScope , ControllerBase , Object[] ) à System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,对象 [] 参数) à System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary2 parameters) à System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) à System.Web.Mvc.ControllerActionInvoker.c__DisplayClassa.b__7() à System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func`1 延续)
内部异常:

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多