2009-07-16 35 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));