我正在使用Simple.Data作为我的Micro-ORM,我想实现一些可能或不可能实现的目标。我想对其中一列与变量列表匹配的表进行删除,因此实际上 SQL 将是这样的:
DELETE FROM [Albums] WHERE Genre IN ("Rock", "Pop")
这可能吗?我尝试了一些事情,例如:
db.Albums.DeleteByGenre(new[] { "Rock", "Pop" });
db.Albums.DeleteAll(db.Albums.Genre == new[] { "Rock", "Pop" });
var genres = new List<string> { "Rock", "Pop" }
db.Albums.DeleteAll(db.Albums.Genre == genres);
哪个不运行,因为我在运行SQL配置文件时看不到生成的查询。开始认为唯一的选择是逐一循环调用DeleteBy
的流派集合?
编辑:
我遇到的问题不是简单数据问题。以上将起作用,我使用了:
var genreList = new List<string> { "Rock", "Pop" };
db.Albums.DeleteByGenre(genreList);
或者,您可以使用:
db.Albums.DeleteAll(db.Albums.Genre == genreList);
我个人更喜欢第一种选择:)
我还没有测试过它,但你可以像这样使用 Array.contains 方法:
string[] genresToDelete = new[] { "Rock", "Pop" };
db.Albums.DeleteAll(genresToDelete.Contains(db.Albums.Genre));
我不是 100% 确定创建语句的智能程度,但我强烈建议您在语句之前定义数组并使用它(而不是为表的每个记录定义它)。另外,我认为这样更具可读性:)