我正在使用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
逐个调用的类型集合?
编辑:
我遇到的问题不是Simple.Data问题。以上都可行,我用过:
var genreList = new List<string> { "Rock", "Pop" };
db.Albums.DeleteByGenre(genreList);
你可以使用:
db.Albums.DeleteAll(db.Albums.Genre == genreList);
我个人更喜欢第一个选项:)
答案 0 :(得分:1)
我还没有对它进行过测试,但您可以像这样使用Array.contains方法:
string[] genresToDelete = new[] { "Rock", "Pop" };
db.Albums.DeleteAll(genresToDelete.Contains(db.Albums.Genre));
我并不是100%确定语句的创建有多聪明,但我强烈建议您在语句之前定义数组并使用它(而不是为表的每条记录定义它)。另外,我认为它更具可读性:)