2009-09-16 7 views
1

J'ai une requête linq qui est passée dans NHibernate que Linq2NHibernate va analyser et retourner des entités peuplées.Quelqu'un a-t-il déjà reçu un «type d'expression non gérée: 1004» utilisant Linq pour NHibernate?

string firstName = "Ryan"; 
Store store = _repository.Query<Store>().Where(x => x.Employees.Select(y => y.FirstName).Contains(firstName)).FirstOrDefault(); 

La partie difficile est x => x.Employees.Select (y => y.FirstName) .Contains (prenom)

Ce que cela devrait faire est de sélectionner les magasins qui ont des employés avec le nom Ryan.

Je reçois une erreur sur la ligne ci-dessus indiquant « Unhandled Type d'expression: 1004 »

Il me semble qu'il est une limitation de Linq2NHibernate et .Select().Contains() juste ne peut pas être analysé.

Des idées? Quelqu'un d'autre a-t-il déjà reçu cette erreur? Que puis-je faire pour le réparer ou le contourner?

[EDIT]

Voici ce que je fini par utiliser à la place.

string firstName = "Ryan" 
Store store = _repository.Query<Store>().Where(x => x.Employees.Any(y => y.FirstName == firstName)).FirstOrDefault(); 

La requête Linq étant x => x.Employees.Any(y => y.FirstName == firstName)

Répondre

3

Je n'utilise LINQ pour NHibernate, mais ce n'est pas comment j'écrire cette requête nulle part ailleurs. Essayez:

string firstName = "Ryan"; 
Store store = _repository.Query<Store>() 
         .Where(s => s.Employees.Any(
           e => e.FirstName.Equals(
            firstName, StringComparison.WhateverTypeYouNeed)) 
       ).FirstOrDefault(); 

Si L2NH n'aime pas string.Equals(), essayez ==

+0

je suis assez utilisé ce que vous me donniez quelques modifications mineures. Merci. –

Questions connexes