我有一个看起来像这样的示例模型:
public class PersonModel
{
public int Id {get; set;}
public string FirstName {get; set;}
public string Lastname {get; set;}
public string City {get; set;}
}
在我的存储库中,我想创建一个搜索方法,在其中传递我的模型 - 但并非所有字段都将始终被填充。我想根据模型中的字段是否已填充来创建 WHERE 和 AND。如果未填充该字段,那么我不想为其创建 WHERE 子句。
例如 - 如果我传入 FirstName = “Bob” 和 City = “Boston” 那么我希望我的搜索看起来像这样:
SELECT * FROM PersonTable WHERE FirstName = @firstName AND City = @city
由于我没有传入 Id 或 LastName,我不希望将它们添加到查询中。如果我只是通过 City = “Boston” 那么我希望它看起来像这样:
SELECT * FROM PersonTable WHERE City = @city
我的回购方法看起来像这样
using Dapper;
public List<PersonModel> Search(PersonModel model)
{
//db = DbConnection connection
var selectSql = "SELECT * FROM PersonTable "; //build out where clause somehow
return db.Query<PersonModel>(selectSql).ToList();
}
我的问题是如何在我的 repo 方法中正确构建它?
原文由 Eldorian 发布,翻译遵循 CC BY-SA 4.0 许可协议
你也可以使用 Dapper 的 SqlBuilder 。
请注意,您必须安装 Dapper.SqlBuilder NuGet 包,因为 Dapper 的主要发行版不附带它。
这是一个例子:
您可以 在此处 找到一些示例。