我正在研究Linq to sql
。我创建了一个搜索数据库中记录的函数。我的职责是:
public IEnumerable<Record> SearchRecord()
{
var records = db.Records.Where(r => r.Name == Name && r.Date == Date
&& r.Country == Country);
return records;
}
我正在尝试处理Name, Date and Country
中的任何一个属性为空的情况。在这种情况下,我只想删除该过滤器并仅基于非null属性获取记录。我不想添加if - else条件。我怎么能这样做?
答案 0 :(得分:1)
由于LINQ使用Fluent接口,您可以执行以下操作:
public IEnumerable<Record> SearchRecord()
{
var records = db.Records;
if (Name != null)
{
records = records.Where(r => r.Name == Name);
}
if (Date != null)
{
records = records.Where(r => r.Date == Date);
}
if (Country != null)
{
records = records.Where(r => r.Country == Country);
}
return records;
}
我很确定这会导致发送到数据库的SQL查询不太理查,但这只是为了说明流畅的api在这个问题上的用法。
您还可以使用??
作弊,例如:
public IEnumerable<Record> SearchRecord()
{
var records = db.Records.Where(r => r.Name == (Name ?? r.Name)
&& r.Date == (Date ?? r.Date)
&& r.Country == (Country ?? r.Country));
return records;
}
答案 1 :(得分:0)
这应该可以帮到你,基本上你会说if the parameter value is null OR the parameter value equals the row value then return me that row.
public IEnumerable<Record> SearchRecord()
{
var records = db.Records.Where(r => (Name == null || r.Name == Name)
&& (Date == null || r.Date == Date)
&& (Country == null || r.Country == Country));
return records;
}