2015-08-19 2 views
0

Итак, у меня есть этот поисковый запрос, который дает мне ошибку. (Он тоже не использовался, fyi ...) в любом случае, это бросание «LINQ to Entities не распознает метод« System.String IfNullOrWhiteSpace »...LINQ to Entities не распознает метод «System.String IfNullOrWhiteSpace»

Есть ли способ сделать это?

var stringResults = _propertyRepository 
      .GetProperties() 
      .Where(
       // standard fields 
       x => x.Address.IfNullOrWhiteSpace("").Contains(searchString) 
        || x.City.IfNullOrWhiteSpace("").Contains(searchString) 
        || x.WebsiteUrl.IfNullOrWhiteSpace("").Contains(searchString) 
        || x.Zip.IfNullOrWhiteSpace("").Contains(searchString) 
        // overrides possible 
        || (x.DescriptionOverride ? x.DescriptionOverrideValue.Contains(searchString) : x.Description.IfNullOrWhiteSpace("").Contains(searchString)) 
        || (x.NameOverride ? x.NameOverrideValue.Contains(searchString) : x.Name.Contains(searchString)) 
        || (x.SquareFootageOverride ? x.SquareFootageOverrideValue.ToString().Contains(searchString) : x.SquareFootage.ToString().Contains(searchString)) 
        // tags 
        || (x.TagsOverride ? x.TagsOverrideValue.Any(f => f.TagName.Contains(searchString)) : x.Tags.Any(f => f.TagName.Contains(searchString))) 
        // bayoptions 
        || x.BayOptions.Any(g => g.BaySizeOverride ? g.BaySizeOverrideValue.ToString().Contains(searchString) : g.BaySize.ToString().Contains(searchString)) 
        || x.BayOptions.Any(g => g.DescriptionOverride ? g.DescriptionOverrideValue.IfNullOrWhiteSpace("").Contains(searchString) : g.Description.IfNullOrWhiteSpace("").Contains(searchString)) 
        || x.BayOptions.Any(g => g.ExcerptOverride ? g.ExcerptOverrideValue.IfNullOrWhiteSpace("").Contains(searchString) : g.Excerpt.IfNullOrWhiteSpace("").ToString().Contains(searchString)) 
        // Freeform Fields 
        || x.FreeFormFields.Any(g => g.NumberValue.ToString().Contains(searchString)) 
        || x.FreeFormFields.Any(g => g.StringValue != null && g.StringValue.ToString().Contains(searchString)) 
      ).ToList(); 
+0

Где вы определили этот метод? Это не в BCL. 'string.IsNullOrWhiteSpace' * есть * однако. –

+1

IsNullOrWhiteSpace, не IfNullOrWhiteSpace – ojf

+1

насчет: .где (! Х => (x.Address == NULL || x.Address.Trim() == String.Empty)) – ngunha02

ответ

3

IfNullOrWhiteSpace является метод пользовательского расширения, поэтому провайдер L2E не знает, что делать с ним.

Вам не нужно делать никаких нулевых проверок при выполнении Contains в L2E, поэтому вы можете просто удалить часть IfNullOrWhiteSpace.

+0

Я использовал его, чтобы поймать нули, иначе он ломался в этой строке. С тех пор я изменил свой код с дополнительным && x.City! = Null, чтобы учесть его и удалить IfNullOrWhiteSpace. еще раз спасибо. –

+0

FYI, я не писал никаких пользовательских расширений, это было доступно для меня без настроек. –

0

Если вы не определили IfNullOrWhiteSpace, тогда функция должна быть IsNullOrWhiteSpace.

Gee спасибо за downvotes ... возможно обмануть этот вопрос, если метод указан правильно? LINQ to Entities does not recognize the method 'System.String Format(System.String, System.Object, System.Object)'

(Кий больше downvotes без сомнения)

+0

Если метод не существует, код вообще не будет компилироваться, и OP не получит ошибку, которую он имеет. – Stijn

+0

Даже это ('IsNullOrWhiteSpace') не должно работать с LINQ для сущностей. – Habib

+0

@stijn Это ошибка сборки, а не ошибка времени выполнения, не так ли? – ojf