2010-09-20 7 views
0

J'utilise une requête qui essaie de trouver un identifiant unique correspondant (guid) tels queMéthode Linq-To-SQL non prise en charge?

var myUsers = from u in table 
       where u.UniqueIdentifierId == MyClass.GetCurrentUserId() 
       select u; 

Cela jette l'erreur Méthode non pris en charge pour ma fonction personnalisée. Je l'ai recodé pour le faire

string guid = MyClass.GetCurrentUserId().ToString(); 

where u.UniqueIdentifierId.ToString() == guid 

Et cela fonctionne. Je veux savoir s'il existe d'autres solutions qui ne nécessitent pas de créer une variable temporaire. Merci.

+0

envoyer votre code de peusdo pour GetCurrentUserId – Nix

Répondre

3

Vous ne pouvez pas l'appeler dans la requête, car LINQ to SQL ne peut pas le traduire. Il essaie de transformer cela en un appel SQL. Ce que vous devez faire est d'appeler cette méthode en dehors de la requête LINQ, comme suit:

var guid = MyClass.GetCurrentUserId(); 

var myUsers = 
    from u in table 
    where u.UniqueIdentifierId == guid 
    select u; 
+0

Ceci est correct, mais il faut toujours la variable temporaire. Je cherche des alternatives. Apparemment, il n'y a pas d'autres solutions? –

1

Avez-vous essayé?

var myUsers = from u in table 
      where u.UniqueIdentifierId == MyClass.GetCurrentUserId().ToString() 
      select u; 

Cela forcerait LINQ to SQL à utiliser la comparaison de chaînes (ce qui est la raison pour laquelle le second a travaillé)

+0

Non cette version ne fonctionne pas. –

+0

Pour être clair, c'est l'appel de méthode - pas la comparaison de chaîne qui est le problème. –

Questions connexes