我想做一些像DELETE FROM TABLE WHERE ID NOT IN(1,2,3)和PAGEID = 9
我有一份IDS列表但如果需要可以更改。我无法弄清楚如何获得LINQ解析器的布尔结果。
这是亚力克希望我的想法。
db.Delete(content => content.PageID == ID).Execute();
我无法弄清楚如何进行NOT IN语句。我已经尝试过List.Contains方法但不太正确。
更新:另一种方法是:
var items = TABLE.Find(x => x.PageID == ID)'
foreach(var item in items)
{
item.Delete();
}
虽然
,但这对数据库的影响要大得多答案 0 :(得分:2)
当你说“不太正确”的时候,你究竟是什么意思?
我希望写一下:
List<int> excluded = new List<int> { 1, 2, 3 };
db.Delete(content => !excluded.Contains(content.PageID)).Execute();
请注意,您需要在排除值数组上调用Contains
,而不是候选人。换句话说,不是说“不在收集中的项目”,而是说“收集不包含项目。”
答案 1 :(得分:0)
试试.Contains:
db.Delete(content => content.PageID.Contains(<Array containing ID's>).Execute();
(以上只是一个例子,可能需要根据您的具体情况进行一些抛光)
答案 2 :(得分: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));