0

我想做一些事情,比如从 ID 不在 (1,2,3) 和 PAGEID = 9 中的表中删除

我有一个 IDS 列表,但如果需要可以更改。我不知道如何获得 LINQ 解析器的布尔结果。

这就是我认为 Subsonic 所期望的。

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();
}

不过,这对数据库的影响更大

4

3 回答 3

2

当你说“有些事情不太正确”时,你到底是什么意思?

我希望写:

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

请注意,您需要调用Contains排除值的数组,而不是您的候选人。换句话说,不是说“项目不在集合中”,而是说“集合不包含项目”。

于 2009-07-16T09:35:49.923 回答
0

试试 . 包含:

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

(以上只是一个例子,可能需要根据您的具体情况进行一些润色)

于 2009-07-16T09:31:05.440 回答
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));
于 2009-07-17T10:49:01.040 回答