【发布时间】:2017-02-08 09:22:49
【问题描述】:
我有一个看起来像这样的示例模型:
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
我的 repo 方法看起来像这样
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 方法中正确构建它?
【问题讨论】:
-
您可以有条件地附加 where 子句。仪式?
-
我假设是的,是的。但是,我正在寻找一个很好的例子来说明如何做到这一点。