2009-07-17 3 views
2

"Contains"メソッドでエラーが発生しても失敗します。Subsonic 3 - IEnumerable.Containsを使用してクエリをサポートしていますか?

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

何が別のアプローチですか?

これはどちらか動作しません:

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

これは行いますが、それは推奨されるアプローチです:

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

答えて

4

は3亜音速/亜音速について何も知らない私は(あなたがAnyを使用することを示唆していますまたはContains)拡張メソッドを使用して、サポートされているかどうかを確認してください。

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

あなた、ありがとう! – Jon

+1

usedIdが空の場合、Findはnullのために失敗します。 protected virtual Expression VisitUnary(UnaryExpression u) { 式オペランド= this.Visit(u.Operand); // **********オペランドがNULLの場合******** if(オペランド!= u.Operand) { return Expression.MakeUnary(u.NodeType、operand、u .Type、u.Method); } return u; } – Jon

+0

私もこの問題に遭遇しましたが、上記の答えはうまくいきますが、LINQ構文のエラーではなく、SubSonic SQLトランスレータに問題があると思います。 SubSonicの作家であるRob Coneryも、うまくいくはずだと言います。この参照を参照してください:http://blog.wekeroad.com/blog/creating-in-queries-with-linq-to-sql/ – Steve

関連する問題