Question

déjà demandé une question sur les conditions dans enchaînant LINQ to Entities. Maintenant, j'utilise LinqKit et tout fonctionne bien. Je veux voir le SQL généré et après avoir lu cette réponse , j'utilise LINQPad .

Ceci est ma déclaration:

var predProduct = PredicateBuilder.True<Product>();
var predColorLanguage = PredicateBuilder.True<ColorLanguage>();

predProduct = predProduct.And(p => p.IsComplete);

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.AsQueryable().Any(expr));

ColorLanguages.Where(predColorLanguage).Dump();

Le code fonctionne dans VS2008, et produire le compiler ensemble de résultat correct, mais LINQPad, j'ai l'erreur suivante:

NotSupportedException: The overload query operator 'Any' used is not Supported.

Comment puis-je voir le SQL généré en cas d'échec LINQPad?

EDIT

Si j'écris

var predColorLanguage = PredicateBuilder.True<ColorLanguage>();

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.Any((p => p.IsComplete));

ColorLanguages.Where(predColorLanguage).Dump();

fonctionne ... WTF?

Était-ce utile?

La solution

Comme vous utilisez LINQKit, vous pouvez faire ce travail en appelant Compile () sur l'expression qui alimente le EntitySet, puis appeler AsExpandable () sur la requête principale:

var predProduct = PredicateBuilder.True<Product>();
var predColorLanguage = PredicateBuilder.True<ColorLanguage>();

predProduct = predProduct.And(p => p.IsComplete);

predColorLanguage = predColorLanguage.And (
  c => c.IdColorEntity.Products.Any(predProduct.Compile()));

ColorLanguages.AsExpandable().Where(predColorLanguage).Dump();

expliqué dans l'article LINQKit , la méthode de compilation ne soient jamais réellement: AsExpandable bandes dehors et modifie l'arbre d'expression pour qu'il fonctionne avec LINQ to SQL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top