2010-07-09 6 views
0

J'ai une requête comme:Linq au comptage des requêtes Entity Framework 4, mais pas le retour des résultats

var fooQuery = (from x in edm.stuff where x.col == DesiredVal select x) 

'stuff' est une vue. Quand je compte les résultats, j'obtiens '1'. Quand je First() ou FirstOrDefault() j'obtiens null.

var fooCount = fooQuery.Count(); // results in 1 
var fooResult = fooQuery.FirstOrDefault(); // results in null 

Cela n'a pas de sens pour moi. Y at-il une circonstance que ce devrait se produire?

+1

Eh bien, je ne pense pas que ce soit possible. Essayez d'examiner SQL résultant. Je pense que le problème est ailleurs. –

+0

Oui, cela semble étrange. Avez-vous essayé Any(), Single(), ToList()? Que retournent-ils? – Yakimych

+0

Comme il s'agissait d'une vue, j'avais des index arbitraires et j'avais construit une relation et une propriété de navigation sur la colonne (qui était nvarchar). La colonne de la vue provenait d'une jointure externe, et était donc parfois nulle et, lorsqu'elle ne l'était pas, elle n'était pas toujours présente dans la table normale adjacente (créée via le concepteur d'entité). Je pouvais compter que c'était là, mais je ne pouvais pas le récupérer avec First() ou Any(). Je n'ai pas essayé les autres. C'est évidemment un cas marginal. Serait-ce un bug? Peut-être que je devrais construire un exemple. – DrydenMaker

Répondre

0

utilisez-vous un membre privé dans l'instruction where?

+0

ne sais pas ce qui créerait un membre privé. la colonne 'id' est une colonne de base de données. – DrydenMaker

+0

J'ai vu comment rendre les membres privés. Non, ce n'est pas mon problème. Pensée intéressante cependant. – DrydenMaker

+0

ce que je veux dire est que dans la classe vous avez des propriétés publiques qui écrivent à et de la part des membres privés. Lorsque vous écrivez linq, vous pouvez utiliser l'un ou l'autre de ces éléments, mais seuls ceux de la propriété publique fonctionneront comme prévu. –

Questions connexes