2009-07-17 4 views
2

Cela échoue avec une erreur avec la méthode "Contient" n'est pas supporté.Subsonic 3 - Est-ce que cela aide à l'interrogation en utilisant IEnumerable.Contains?

List<int> usedID= new List<int> { 1, 2, 3 }; 
var f = WebPageContent.Find(x => !usedID.Contains(x.PageID)); 

Cela semble étrange alors quelle est l'approche alternative?

Cela ne fonctionne pas non plus:

var dd = from i in WebPageContent.All() 
     where !usedID.Contains(i.PageID) 
     select i; 

Ce fait, mais est-il l'approche recommandée:

var table = new WebPageContentTable(_db.DataProvider); 
var g = new SubSonic.Query.Select() 
      .From(table) 
      .Where(table.ID) 
      .In(usedID) 
      .Execute(); 

Répondre

4

Ne sachant pas quoi que ce soit à propos de Subsonic/Subsonic 3 Je vous suggère d'utiliser le Any (ou Contains) méthode d'extension et voir si elle est prise en charge.

List<int> usedID= new List<int> { 1, 2, 3 }; 
var f = WebPageContent.Find(x => !usedID.Any(e => e == x.PageID)); 
+0

Vous da man, merci! – Jon

+1

Si usedId est vide, le Find tombe à cause d'une valeur nulle. Visite virtuelle d'expression visitUnary (UnaryExpression u) { Opérande d'expression = this.Visit (u.Operand); // ********** opérande EST NULLE ICI ******** if (opérande! = U.Operand) { return Expression.MakeUnary (u.NodeType, opérande, u .Type, u.Méthode); } retournez; } – Jon

+0

J'ai également rencontré ce problème, et la réponse ci-dessus fonctionne, mais je crois que c'est un problème avec le traducteur SubSonic SQL, et pas une erreur dans votre syntaxe LINQ. Même Rob Conery, l'auteur de SubSonic, dit que ça devrait marcher. Voir cette référence: http://blog.wekeroad.com/blog/creating-in-queries-with-linq-to-sql/ – Steve

Questions connexes