【发布时间】:2020-09-07 12:02:20
【问题描述】:
我想连接两个相互关联的表, 在客户表中,有删除和批准两列。获取已批准且未删除的客户,然后使用 CustId (Both Tables has CustId) 将客户与贷款表匹配并按提供的参数过滤
- 已删除=0
- 已批准=1
传递的参数是(并且它们可以是可选的)用户只能传递一个或两个或超过2个 利率 贷款日期 最后付款日期
public async Task<IEnumerable<Loan>> ManageGettingAll(string InterestRate, string LoanTrfDate, string LastPaymentDate)
{
IEnumerable<Loan> loans = null;
//var sql = "Select * from MonthlyInterest where LoanAccountNo=@Id AND Deleted=@Deleted AND CAST(TranDate AS DATE) BETWEEN @StartDate AND @EndDate";
try{
using (var conn = new SqlConnection(connectionstring))
{
await conn.OpenAsync();
var parameters = new
{
InterestRate = InterestRate,
LoanTrfDate = LoanTrfDate,
LastPaymentDate = LastPaymentDate
};
string sql = "Select l.*, c.FirstName_CompanyName from dbo.Loan l left join Customer where and l.Deleted = 0 and and l.Approved = 1 c on l.CustId=c.CustId Where InterestRate=@InterestRate AND CAST(LoanTrfDate AS DATE)=@LoanTrfDate AND CAST(LastPaymentDate AS DATE)=@LastPaymentDate";
loans = await conn.QueryAsync<Loan>(sql, parameters);
}
}
catch (Exception ex)
{
throw;
}
return loans;
}
【问题讨论】:
-
要清楚,您的问题是如何仅在指定值的情况下按参数过滤?并忽略它们为空的参数?
-
至少要传递一个参数
-
您可以使用 DynamicParameters 对象。您可以检查传递的字符串是否不为空,然后仅将其添加到 DynamicParameters 对象。在 SQL 端,您可以使用 ISNULL(@InterestRate ,InterestRate) 或 Coalease 函数。
标签: c# sql sql-server asp.net-core dapper