2010-05-24 3 views
0

Je suis en train d'obtenir les lignes où la ParentID clé étrangère == 0, ce qui est ce que je suis en train, mais je reçois un NotSupportedException car il ne peut pas traduire le ArrayIndex [0]:Linq to Entities, vérifiant l'ID de clé étrangère spécifique?

IQueryable<ApplicationSectionNode> topLevelNodeQuery = 
    from n in uacEntitiesContext.ApplicationSectionNodeSet 
    where (int)n.Parent.EntityKey.EntityKeyValues[0].Value == 0 
    orderby n.Sequence 
    select n; 

donc je dois extrayez cet ArrayIndex de la requête afin que l'exécution puisse traduire la requête avec succès. Je ne suis pas sûr de savoir comment faire cela. Comment interroger un objet spécifique via sa clé primaire ou un ensemble d'objets via une clé étrangère? Editer: Notez qu'il n'y a pas réellement de ligne dans la table avec NodeId == 0, le 0 est une valeur magique (pas mon idée) pour indiquer les nœuds de niveau supérieur. Je ne peux pas faire n.Parent.NodeId == 0

+2

Avez-vous essayé "où n.Parent == null"? –

+0

@Mattias qui fonctionne réellement. Je ne pensais pas que ce serait parce que les gens qui ont fait la base de données ont utilisé une valeur de 0 au lieu de null. Postez ceci comme une réponse s'il vous plaît et je vais le marquer comme accepté. – AaronLS

Répondre

1

Vous devriez pouvoir utiliser where n.Parent == null. La raison qui fonctionne est que EF ne peut pas trouver de ligne avec l'ID de 0 dans la base de données, donc à la place il définit la propriété à null (et vous pouvez l'interroger de la même manière).

1

Qu'en est-:

IQueryable<ApplicationSectionNode> topLevelNodeQuery = 
from n in uacEntitiesContext.ApplicationSectionNodeSet 
where (int)n.Parent.EntityKey.EntityKeyValues.First().Value == 0 
orderby n.Sequence 
select n; 
+0

Bien essayé. J'ai essayé des variantes similaires. Votre code produit un nouveau message NotSupportedException: Le membre de type spécifié 'EntityKey' n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d'entité et les propriétés de navigation d'entité sont pris en charge. – AaronLS

Questions connexes