如何使用linq-to-sql从数据库访问记录?

时间:2012-11-08 13:13:40

标签: c# linq linq-to-sql

我正在研究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条件。我怎么能这样做?

2 个答案:

答案 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;
}
相关问题