2015-06-18 4 views
0

У меня есть два основных объекта: «Property» и «BayOptions», которые имеют «переопределить» поля. Так,LINQ: изменить выражение на основе дочерних свойств

BayOption.Description (строка),

BayOption.DescriptionOverride (BOOL), и

BayOption.DescriptionOverrideValue (строка)

является хорошим примером того, как все поля настройки , (Данные поступают из внутренней системы ERP/CRM, что продавцы могут переопределять значение.)

Я пишу поиск, который принимает во внимание этих переопределения, как это: (Also, see previous article)

List<Property> stringResults = db.Properties 
       .Where(
         x => x.Address.Contains(searchString) 
        ... 
Works HERE--> || (x.DescriptionOverride ? x.DescriptionOverrideValue.Contains(searchString) : x.Description.Contains(searchString)) 
        ... 
        // bayoptions TODO: flesh these out more... 
Need work here--> || x.BayOptions.Any(g => g.Description.Contains(searchString))      
        ).ToList(); 

Что Я беспокоюсь о том, как сделать то же самое из «Works ЗДЕСЬ» выше, чтобы «Нужно работать здесь» выше. В принципе, дочерние объекты. Я пробовал что-то вроде этого, но я не уверен, что он работает правильно. Синтаксически это нормально ... в любом случае, будет эта работа ?:

|| x.BayOptions.Any(g => g.DescriptionOverride ? g.DescriptionOverrideValue.Contains(searchString) : g.Description.Contains(searchString)) 
+1

просто попробовать :-) – Grundy

+0

я провел время манипулирования данных вручную, чтобы проверить это ... видимо, это, кажется, работает .. нужно проверить каждую перестановку, но я думаю, что это делает работа ... Проб у меня мало данных –

ответ

0

Если я понимаю правильно, вы хотите, чтобы проверить, есть ли переопределение и поиск на этом, в противном случае поиск оригинальное описание. Что-то вроде этого следует сделать это:

List<Property> stringResults = db.Properties 
       .Where(
         x => x.Address.Contains(searchString) 
|| (x.DescriptionOverride && x.DescriptionOverrideValue.Contains(searchString)) 

|| x.BayOptions.Any(g => g.Description.Contains(searchString))      
        ).ToList(); 
+0

спасибо, но не так просто. Детские объекты с переопределениями. Мой выше код, похоже, работает, я просто хотел, чтобы сообщество согласилось, потому что у меня нет большого количества данных для тестирования перестановок. –

Смежные вопросы