2009-07-16 42 views
0

我要像做DELETE FROM表WHERE ID NOT IN(1,2,3)和PAGEID = 9重现通过LINQ /亚音速

我有ID列表 “删除NOT IN” SQL语句但如果需要的话可以改变。我无法弄清楚如何获得LINQ解析器的布尔结果。

这是什么Subsonic期待我的想法。

db.Delete(content => content.PageID == ID).Execute();

我无法弄清楚如何做NOT IN语句。我试过List.Contains方法,但不是很对。

UPDATE:一种选择是要做到:

var items = TABLE.Find(x => x.PageID == ID)' 
foreach(var item in items) 
{ 
    item.Delete(); 
} 

此访问数据库多了很多,虽然

回答

0

尝试。载:

db.Delete(content => content.PageID.Contains(<Array containing ID's>).Execute(); 

(以上只是一个例如,可能需要针对您的具体情况进行一些抛光)

+0

你有错误的方式围绕 – Jon 2009-07-16 16:31:50

2

当你说“不太对劲”时,你的意思是什么?

我想到写:

List<int> excluded = new List<int> { 1, 2, 3 }; 
db.Delete(content => !excluded.Contains(content.PageID)).Execute(); 

请注意,您需要调用Contains排除值的阵列上,而不是在您的候选人。换句话说,不是说“不在收藏中的物品”,而是在说“收藏不包含物品”。

+0

那是什么我试过了。我认为这必定是亚音速中的一个错误。 – Jon 2009-07-16 09:40:57

0

我发现这个工作,但它不是通过LINQ

var table = new WebPageContentTable(_db.DataProvider); 
var g = new SubSonic.Query.Delete<WebPageContent(_db.DataProvider) 
      .From(table) 
      .Where(table.ID) 
      .NotIn(usedID) 
      .Execute(); 

我发现,这样做的工作,并通过LINQ - 但它击中数据库多次。

 var f = WebPageContent.Find(x => !usedID.Any(e => e == x.ID)); 
     if (f.Count > 0) 
     { 
      var repo = WebPageContent.GetRepo(); 
      repo.Delete(f); 
     } 

这是我想象中的一重击到数据库的工作,但我得到了QueryVisitor抛出异常:: VisitUnary

WebPageContent.Delete(x => !usedID.Any(e => e == x.ID));