Je travaille avec un générateur d'arbre d'expression très basique pour créer des expressions SQL.Expression permettant de comparer les propriétés Guid par rapport aux valeurs String puis de traduire en TSQL
Par exemple, pour créer une expression pour une classe hypothétique User
comparant une propriété String
appelé « Nom » par rapport à une valeur String
« john », j'utilise un morceau de code similaire à ceci:
var propertyInfo = typeOf(User).GetProperties().First(p=>p.Name=="Name");
Expression.Call(
Expression.Property(Expression.Parameter(typeof(User), "val"), propertyInfo),
typeof(string).GetMethod("Contains"),
Expression.Constant("john")
)
Ce qui génère (après quelques lignes de code et EF
intervention) quelque chose de similaire à:
[...] Name LIKE '%john%' [...]
Mon problème est avec Guid
propriétés ...
Je ne peux pas figurés comment devrait construire l'expression de comparer une propriété Guid
par rapport à une valeur String
, pour générer une très simple SQL
requête similaire à:
[...] Id='38EB4D06-E50B-4C7A-80FF-A6350051682A' [...]
Je ne peux pas utiliser la méthode Equals
entre Guid
et String
. .. Im vraiment aucune idée, sera bien reçu toute suggestion ...
Vous pouvez essayer 'ToString()' pour convertir le Guid à une chaîne –
j'ai essayé avec [SqlFunctions.StringConvert] (http://msdn.microsoft.com/en-us/library/dd466166.aspx) parce que ' ToString() '[n'est pas implémenté sur LinQ for Entities Query] (http://stackoverflow.com/questions/26146272/cant-use-tostring-in-linq-to-entities-query), mais accepte uniquement les nombres en tant que paramètres ... –