选择所有参数
本文关键字:参数 选择 | 更新日期: 2023-09-27 18:14:33
假设一个方法有5个参数它们是3个不同表中的列。方法调用者可以将null传递给所有参数。
下面的Linq部分public Customer GetCustomer(int id, DateTime? dob, string FName, string MI, string LName)
{
query = (from customer in CustomerDb.customers
join
,...
where cpn.FirstName == FName && cpn.LName == LName
..
select customer);
}
现在,如果他们只提供一个FName,我希望我的where子句只包含FName属性。if-else或switch情况是实现这一目标的唯一方法吗?我不能把所有的查询与和,因为如果他们只提供一个FName,我将寻找空dob, id, MI和LName。它们可以将null传递给所有值(0在int的情况下),这意味着我需要返回DB中的所有内容,而不是null的And。
您可以简单地扩展您的where来解释默认值:
where (FName == null || cpn.FirstName == FName) && (LName == null || cpn.LName == LName)
这会使位置变得复杂一些,但我看不出为什么它会失败或表现不佳。
使用λ我需要返回DB中的所有内容,而不是null的AND。
:
public Customer GetCustomer(int? id, DateTime? dob, string fName,
string mi, string lName)
{
IQuerable<Customer> query = CustomerDb.customers;
if (id.HasValue)
{
query = query.Where(c => c.id == id.Value)
}
else
{
query = query.Where(c => c.id == null)
}
if (dob.HasValue)
{
query = query.Where(c => c.Dob == dob.Value)
}
else
{
query = query.Where(c => c.Dob == null)
}
if (!string.IsNullOrWhitespace(fName))
{
query = query.Where(c => c.FName == fName)
}
else
{
query = query.Where(c => c.Fname == null)
}
// repeat for mi, lName
var result = query.FirstOrDefault();
return result;
}
如果您不想过滤没有传递的值,只需删除您选择的else语句。