整数を含む列の最大値を取得するには、次のT-SQLコマンドを使用できます
SELECT MAX(expression )
FROM tables
WHERE predicates;
Entity Frameworkで同じ結果を取得することは可能ですか?.
私は次のモデルを持っているとしましょう
public class Person
{
public int PersonID { get; set; }
public int Name { get; set; }
public int Age { get; set; }
}
最年長者の年齢を取得するにはどうすればよいですか?
int maxAge = context.Persons.?
これを試してくださいint maxAge = context.Persons.Max(p => p.Age);
そして、ファイルの先頭にusing System.Linq;
があることを確認してください
リストが空の場合、例外が発生します。このソリューションでは、この問題を考慮します。
int maxAge = context.Persons.Select(p => p.Age).DefaultIfEmpty(0).Max();
または、これを試すことができます:
(From p In context.Persons Select p Order By age Descending).FirstOrDefault
フィルターを追加したい場合、助けになるかもしれません:
context.Persons
.Where(c => c.state == myState)
.Select(c => c.age)
.DefaultIfEmpty(0)
.Max();
maxAge = Persons.Max(c => c.age)
またはそれらの線に沿って何か。
VB.Netでは
Dim maxAge As Integer = context.Persons.Max(Function(p) p.Age)
多くの人が言ったように-このバージョン
int maxAge = context.Persons.Max(p => p.Age);
テーブルが空の場合に例外をスローします。
つかいます
int maxAge = context.Persons.Max(x => (int?)x.Age) ?? 0;
または
int maxAge = context.Persons.Select(x => x.Age).DefaultIfEmpty(0).Max()
選択された回答は例外をスローし、Carlos Toledoからの回答は、データベースからすべての値を取得した後にフィルタリングを適用します。
次のコードは、単一のラウンドトリップを実行し、可能なインデックスを使用して例外なく単一の値を読み取ります。
int maxAge = _dbContext.Persons
.OrderByDescending(p => p.Age)
.Select(p => p.Age)
.FirstOrDefault();
あなたの列はnull可能です
int maxAge = context.Persons.Select(p => p.Age).Max() ?? 0;
列はnull入力不可
int maxAge = context.Persons.Select(p => p.Age).Cast<int?>().Max() ?? 0;
どちらの場合でも、2番目のコードを使用できます。 DefaultIfEmpty
を使用すると、サーバーでより大きなクエリを実行できます。興味がある人のために、EF6に相当するものを次に示します。
DefaultIfEmpty
なしのクエリ
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
MAX([Extent1].[Age]) AS [A1]
FROM [dbo].[Persons] AS [Extent1]
) AS [GroupBy1]
DefaultIfEmpty
を使用したクエリ
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
MAX([Join1].[A1]) AS [A1]
FROM ( SELECT
CASE WHEN ([Project1].[C1] IS NULL) THEN 0 ELSE [Project1].[Age] END AS [A1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
LEFT OUTER JOIN (SELECT
[Extent1].[Age] AS [Age],
cast(1 as tinyint) AS [C1]
FROM [dbo].[Persons] AS [Extent1]) AS [Project1] ON 1 = 1
) AS [Join1]
) AS [GroupBy1]