1

我正在努力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为空的情况。在这种情况下,我只想删除该过滤器并仅基于非空属性获取记录。我不想添加 if - else 条件。我怎样才能做到这一点 ?

4

2 回答 2

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 查询不太理想,但这只是为了说明在这件事上 fluent 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;
}
于 2012-11-08T13:27:53.677 回答
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;
}
于 2012-11-08T13:17:21.010 回答