我有一個名爲Tags(Id,Name)的數據庫表,我想從中選擇名稱與列表中的名稱相匹配的名稱。在SQL我會使用類似:如何在PetaPoco中使用SQL WHERE IN構造?
Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
但現在在一個ASP.Net MVC3項目我堅持搞清楚如何正確地做它用PetaPoco。到目前爲止,我已經試過:
var tagsToFind = new string[] { "SqlServer", "IIS" };
var sql = PetaPoco.Sql.Builder.Select("*").From("Tags").Where("Name in (@0)", tagsToFind);
var result = db.Query<Tag>(sql);
導致下面的SQL,其中只有第一我tagsToFind的列表名稱是用來匹配表中的數據,而不是所有的人。
SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
這有點令人沮喪,知道這可能不是那麼辛苦..任何幫助表示讚賞!
更新: 我發現,它可以以另一種方式
var sql = PetaPoco.Sql.Builder.Append("Select * from tags Where Name IN (@0", tagNames[0]);
foreach (string tagName in tagNames.Where(x => x != tagNames[0])) {
sql.Append(", @0", tagName);
}
sql.Append(")");
var result = db.Query<Tag>(sql)
這讓我我同時使用sqlparameters想要的東西來完成。所以我想現在已經足夠好了,雖然不是非常漂亮。
/麥克
很好,這幫助我與PetaPoco一起使用多個參數,謝謝! – Mitch99
當我嘗試使用整數數組時,它只是將該子句留作「字段in(@ 0)」 而是,我執行了一個string.Join(「,」,integerArray)作爲參數。無論如何,這似乎更有效,因爲PetaPoco ParametersHelper類迭代了可枚舉元素。 –
神聖煙!這是一些外部思考的問題 – Gaspa79