2016-12-08 4 views
1

С помощью/предложениями, которые я получил в предыдущем вопросе, я спросил: мне удалось сузить мою проблему до вычисленного свойства.Фильтр запросов Linq to SQL с вычисленным свойством Lightswitch

Вот фильтрация запросов, не удается:

query = query.Where(a => a.collection.Any(b => b.Name.StartsWith(c)));

Все там, кажется, работает нормально, но Name вызывает запрос на провал. Name - вычисленное свойство b, и когда я заменяю его стандартным свойством, запрос работает.

Я не понимаю, что это подразумевает в sql, поэтому я не могу понять, как исправить/заменить, чтобы я мог фильтровать это свойство. Если кто-то может объяснить, что не так позади этого запроса, это будет оценено.

+0

Ваш существующий запрос вызовет исключение, поскольку без обеспечения того, что 'collection' не является пустым или пустым, он будет генерировать исключение в любое время, когда он встретится. – Greg

ответ

0

Вы должны быть в состоянии сделать свою цель, следующим:

var start = "Joh"; 
var query = content.Where(entity => 
        entity.ExampleCollection.Exist(obj => 
        obj.Name.StartsWith(start)); 

Это будет фильтровать, если он Exist внутри коллекции и соответствует вашим критериям начала.

+0

'Exist' не определен. Я использую Lightswitch oob, если это помогает. – Mat

+0

Потенциальная проблема коллекции «null», которую вы указываете, является реальной, но это не проблема, которую я пытаюсь исправить. – Mat

2

Вычислимые свойства не определены в базовой базе данных и поэтому вы не можете ссылаться на них в своих запросах.

+0

Вот что я думал. Любой способ обойти это? – Mat

+0

Мэтт ударил ноготь по голове. Вот хорошо написанная статья, которая может дать некоторое представление о том, как бороться с «вычисленными свойствами» и EF: http://daveaglick.com/posts/computed-properties-and-entity-framework –

+0

@SRQCoder Очень хорошая статья! Будет продолжать читать, выглядит многообещающим. – Mat