2014-12-03 45 views
0

我使用Simple.Data作爲我的Micro-ORM,並且我想實現某些可能或不可能的事情。 我想做一個刪除在其中一列與變量列表匹配的表上,因此SQL的實際效果如下:從表中刪除列「在」範圍內 - Simple.Data

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

Altenatively你可以使用:

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

我更喜歡個人的第一個選項:)

+0

不確定它是否支持Simple.Data,但邏輯等效於'IN(「Rock」,「Pop」)'是db.Albums.DeleteAll(類型.Contains(db.Albums.Genre))' – 2014-12-03 13:43:35

+0

查看我對Stefan的評論,它也適用於此建議。謝謝:) – MartinM 2014-12-03 14:16:12

+0

更新了我的答案。似乎我有另一個問題 – MartinM 2014-12-03 15:18:26

回答

1

我沒有測試它,但你可以使用該Array.contains方法是這樣的:

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

我不是100%確定如何聰明的statemen t會被創建,但我強烈建議你在語句之前定義數組,然後使用它(而不是爲每個表的記錄定義它)。另外,我認爲它的可讀性更強:)

+0

感謝您的答覆。不過,這看起來並不正確。 「genresToDelete(db.Albums.Genre)」只會返回一個布爾值,當然?意思我會叫db.Albums.DeleteAll(true); - 似乎不正確。另外.Contains(..)只能接受一個字符串,而不是一個集合 - 所以如果有多個類型,我們將會有無效的參數錯誤。雖然欣賞幫助! – MartinM 2014-12-03 14:06:45

+0

更新了我的答案。似乎我有另一個問題 – MartinM 2014-12-03 15:18:51

+1

嗨!那麼,我對Simple.Data沒有經驗。根據文件,它可以這樣工作:)請注意,我寫了genresToDelete.CONTAINS!我的想法是:對於每個db.Albums.Genre:檢查genresToDelete-Array是否包含該類型。如果數組元素等於參數,則contains方法返回true。我沒有測試它,所以它可能是錯誤的;) 無論如何,我很高興它現在有效,你解決了這個問題。感謝編輯和關於它的信息! :-) – 2014-12-08 23:35:13