2016-12-08 3 views
1

Avec l'aide/suggestions que j'ai reçues dans une question précédente, j'ai réussi à réduire mon problème à une propriété calculée.Filtre de requête Linq to SQL avec la propriété calculée Lightswitch

Voici le filtrage de requête qui échoue:

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

Tout y semble bien fonctionner mais Name cause la requête à l'échec. Name est une propriété calculée de b et lorsque je remplace cela par une propriété standard, la requête fonctionne.

Je ne comprends pas ce que cela implique dans le sql donc je ne peux pas comprendre comment réparer/remplacer cela afin que je puisse filtrer par cette propriété. Si quelqu'un pouvait expliquer ce qui ne va pas derrière cette requête, ce serait apprécié.

+0

Votre requête existante lèvera une exception, car sans s'assurer que 'collection' n'est ni vide ni vide, elle lèvera une exception chaque fois qu'elle rencontrera. – Greg

Répondre

0

Vous devriez être en mesure de faire votre objectif, ce qui suit:

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

qui filtre basé sur si elle Exist dans la collection et répond à vos critères de départ.

+0

'Exist' n'est pas défini. J'utilise Lightswitch oob, si cela aide. – Mat

+0

Le problème potentiel de la collection 'null' que vous signalez est réel, mais ce n'est pas le problème que j'essaie de résoudre. – Mat

2

Les propriétés calculées ne sont pas définies dans la base de données sous-jacente et vous ne pouvez donc pas les référencer dans vos requêtes.

+0

C'est ce que je pensais. Un moyen de contourner cela? – Mat

+0

Matt a frappé le clou sur la tête. Voici un article bien écrit qui peut donner un aperçu sur la façon de traiter les «propriétés calculées» et EF: http://daveaglick.com/posts/computed-properties-and-entity-framework –

+0

@SRQCoder Très bel article! Continuera à lire, semble prometteur. – Mat