string.Contains с Linq To Sql вернуть исключение Null - PullRequest
0 голосов
/ 27 октября 2009

My 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. Но он возвращает исключение ArgumentNullException при выполнении linq. На самом деле столбец с проверкой "VilleArrive" ("city") никогда не бывает нулевым, а всегда пустой строкой

Я действительно не понимаю, почему это добавляется. Моя проблема выглядит так: LINQ to SQL и строки Null, как мне использовать Contains? но ответы не работают со мной.

Кажется, что ключевое слово "LIKE" вызывает Linq.SqlClient.SqlHelpers.GetStringContainsPattern (текст строки, экранирование символа)

Спасибо за вашу помощь, извините за мой английский.

Здесь трассировка стека моего проекта является проектом ASP MVC 1.0

System.ArgumentNullException был необработанный пользовательским кодом Message = "La valeur ne peut pas être null. \ n \ Nom du paramètre: текст "
Источник = "System.Data.Linq"
ParamName = "text" StackTrace: à System.Data.Linq.SqlClient.SqlHelpers.GetStringContainsPattern (String текст, Чар побег) à 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 BO) à System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitBinaryOperator (SqlBinary BO) à 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 узел, 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 (Boolean UpdateAlerts) данс D: \ AspProject \ covCake \ covCake \ Services \ ProjetAlerts.cs: Ligne 111 à covCake.Controllers.AlertesController.SendAlertEmail (String п) данс D: \ AspProject \ covCake \ covCake \ Контроллеры \ AlertesController.cs: Ligne 152 lambda_method (ExecutionScope, ControllerBase, Object []) à System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase контроллер, параметры 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. <> c__DisplayClassa.b__7 () à System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter фильтр, ActionExecutingContext preContext, продолжение Func`1)
InnerException:

1 Ответ

1 голос
/ 27 октября 2009

Попробуйте удалить сравнение != "" и убедитесь, что передаваемый параметр не равен нулю:

PROJETS = PROJETS.Where(p => (p.VilleArrive != null) &&
                             (alerte.VilleArrive != null) &&
                              p.VilleArrive.Contains(alerte.VilleArrive));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...