C# 从表中删除,其中列为;在;范围-简单。数据

C# 从表中删除,其中列为;在;范围-简单。数据,c#,sql,orm,simple.data,C#,Sql,Orm,Simple.data,我正在使用Simple.Data作为我的微型ORM,我想实现一些可能实现或不可能实现的事情。。 我想对其中一列与变量列表匹配的表执行删除操作,因此实际上SQL类似: DELETE FROM [Albums] WHERE Genre IN ("Rock", "Pop") 这可能吗?我尝试过以下几种方法: db.Albums.DeleteByGenre(new[] { "Rock", "Pop" }); db.Albums.DeleteAll(db.Albums.Genre == new[] {

我正在使用Simple.Data作为我的微型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);
或者,您可以使用:

db.Albums.DeleteAll(db.Albums.Genre == genreList);

我个人更喜欢第一个选项:)

我还没有测试过,但您可以使用Array.contains方法,如下所示:

string[] genresToDelete = new[] { "Rock", "Pop" };
db.Albums.DeleteAll(genresToDelete.Contains(db.Albums.Genre));

我不能100%确定创建该语句的智能程度,但我强烈建议您在语句之前定义数组并使用它(而不是为表的每个记录定义它)。另外,我认为这样更具可读性:)

不确定它是否有简单的.Data支持,但逻辑上等同于
IN(“摇滚”、“流行”)
的是
db.Albums.DeleteAll(genres.Contains(db.Albums.Genre))
见我对Stefan的评论,它也适用于这个建议。谢谢:)更新了我的答案。看来我又有问题了谢谢你的回答。不过,这似乎并不正确。“genresote(db.Albums.Genre)”肯定只会返回一个布尔值?这意味着我将调用db.Albums.DeleteAll(true);-似乎不对。另外,Contains(..)只能接受一个字符串,而不是一个集合-因此,如果有多个类型,我们将有无效的参数错误。谢谢你的帮助!更新了我的答案。看来我又有问题了嗨!嗯,我没有简单数据的经验。根据文档,它可以这样工作:)请注意,我已经编写了genresodelete.CONTAINS!我的想法是:对于每个db.Albums.Genre:检查genresote数组是否包含该类型。如果存在与参数相等的数组元素,则contains方法返回true。但是我没有测试它,所以它可能是错误的;)不管怎样,我很高兴它现在起作用了,你解决了这个问题。感谢您的编辑和相关信息!!!:-)
string[] genresToDelete = new[] { "Rock", "Pop" };
db.Albums.DeleteAll(genresToDelete.Contains(db.Albums.Genre));