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いずれかのプロパティが nullの場合を処理しようとしています。その場合、そのフィルターを削除し、null 以外のプロパティに基づいてのみレコードをフェッチしたいだけです。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 クエリが最適でなくなると確信していますが、これは、この問題で流暢な 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 に答える