1

SQL Server 2008 データベース/テーブルに整数列 (null ではない) があり、それを取得したいと考えています。

  // go to the table and get the largest number, if none exists, use 0.
        int iNumber = iContext.DetailsRecords.Max(x => x.Number); // from entity

しかし、最初はテーブルは空です。を0に設定したいのですが、コードの変更方法は?

4

5 に答える 5

3

DetailsRecords が null かどうかを確認したくないが、ソース シーケンスが空の場合は処理したい場合は、この回答を使用します (LINQ の使用法に合わせて少し調整しました)。

最大またはデフォルト?


int iNumber = iContext.DetailsRecords.Select(x => (int?)x.Number).Max() ?? 0;

于 2012-11-12T18:53:05.503 に答える
2

これを試してください:
int iNumber = iContext.DetailsRecords==null? iContext.DetailsRecords.Max(x => x.Number) : 0;
または
int iNumber = iContext.DetailsRecords.Any()? iContext.DetailsRecords.Max(x => x.Number) : 0;、テーブルが null ではなく、0 レコードが含まれている場合。

于 2012-11-12T18:45:52.773 に答える
2

これに使えますDefaultIfEmpty。シーケンスが空の場合は、指定されたアイテムをシーケンス内の唯一のアイテムとして返します。そうでない場合は、元のシーケンスを返します。

IEnumerable<int> numbers = new int [] { };

numbers.DefaultIfEmpty(0).Max();
于 2012-11-12T18:46:54.003 に答える
0

この関数を使用してAny、レコードがあるかどうかを確認します。

int iNumber = iContext.DetailsRecords.Any() 
              ? iContext.DetailsRecords.Max(x => x.Number) 
              : 0;
于 2012-11-12T18:48:00.670 に答える
0

私はこれがすでに受け入れられた答えを持っていることを知っています、しかしもう一つの良い方法はただFirstOrDefault()でしょう。

int iNumber = iContext.DetailsRecords.OrderByDescending(x => x.Number).FirstOrDefault();

私はこの方法を頻繁に使用し、結果がnullの場合は新しいオブジェクトを設定することもできます。

 MyObject m = mySearch.GetItems.Where(a => a.id == id).FirstOrDefault() ?? new MyObject();
于 2012-11-12T19:10:25.333 に答える