Overview
Entity Framework コアを使用すると、データベースコマンドを明示的に実行せずにアプリケーション内のデータを操作できます。 データをクエリするには、 LINQ(言語統合クエリ) 構文を使用します。 LINQ では、C# 固有のキーワードと演算子を使用して、厳密に型指定されたクエリを作成できます。 アプリケーションを実行すると、F Core プロバイダーは LINQ クエリを自動的に変換し、MongoDB Query API を使用してデータベース上で実行します。
このガイドでは、FS コア プロバイダーを使用するように構成されたアプリケーションにおける一般的なクエリ操作の例を確認できます。
Tip
FS コア プロバイダーを使用するようにアプリケーションを構成する方法については、「 FS コアの構成 」を参照してください。
エンティティの検索
FirstOrDefault()
メソッドを使用して 1 つのエンティティを検索するか、 Where()
メソッドを使用して複数のエンティティを検索します。
単一エンティティの検索
FirstOrDefault()
メソッドは、コレクション内で検索条件に一致する最初に見つけたエンティティを返し、一致するエンティティが見つからない場合はnull
を返します。
次のコードでは、 Planets
FirstOrDefault()
name
を使用して、 DBSet
(
var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury"); Console.WriteLine(planet.name);
複数エンティティの検索
Where()
メソッドを使用して、コレクションから複数のエンティティを取得できます。 Where()
は、検索条件に一致するすべてのエンティティを返します。
次のコードでは、 Where()
メソッドを使用して、 hasRings
フィールドがtrue
に設定されているすべての惑星を検索し、惑星名をコンソールに出力します。
var planets = db.Planets.Where(p => p.hasRings); foreach (var p in planets) { Console.WriteLine(p.name); }
ソート エンティティ
クエリからエンティティを返す順序を指定するには、 OrderBy()
メソッドを使用します。 OrderBy()
は、指定された並べ替え条件に基づいて要素を昇順で並べ替えます。
次のコードでは、 OrderBy()
メソッドを使用してすべての惑星を検索し、 orderFromSun
フィールドの値で昇順に並べ替えます。 次に、結果をコンソールに出力します。
var planetList = db.Planets.OrderBy(p => p.orderFromSun); foreach (var p in planetList) { Console.WriteLine(p.name); }
Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune
Tip
降順でソート
OrderByDescending()
メソッドを使用して、クエリの結果を降順で並べ替えることができます。
ThenBy()
メソッドを使用して、クエリで 2 次並べ替えを実行できます。 ThenBy()
メソッドは、指定された並べ替え条件に基づいて、 OrderBy()
メソッドの結果を昇順で並べ替えます。 ThenBy()
メソッドはOrderBy()
メソッドに連結する必要があります。
Tip
降順での二次ソート
ThenByDescending()
メソッドを使用して、降順で二次並べ替えを実行できます。
次のコードでは、 OrderBy()
メソッドとThenBy()
メソッドを使用してすべての惑星を検索し、 hasRings()
フィールドで並べ替え、 name
フィールドで 2 次並べ替えます。
var planetList = db.Planets.OrderBy(o => o.hasRings).ThenBy(o => o.name); foreach (var p in planetList) { Console.WriteLine("Has rings: " + p.hasRings + ", Name: " + p.name); }
Has rings: False, Name: Earth Has rings: False, Name: Mars Has rings: False, Name: Mercury Has rings: False, Name: Venus Has rings: True, Name: Jupiter Has rings: True, Name: Neptune Has rings: True, Name: Saturn Has rings: True, Name: Uranus
Tip
ブール値を持つフィールドでソートすると、フィールド値がfalse
のエンティティがtrue
のフィールド値より前に表示されます。
スカラー集計
FS コア プロバイダーは、次のスカラー集計メソッドをサポートしています。
Count()
:コレクション内の要素の数または述語に一致するドキュメントの数を返しますLongCount()
:コレクション内の要素の数をlong
として返すか、述語に一致するドキュメントの数を返しますAny()
:コレクション内のいずれかの要素が述語に一致する場合はtrue
を返しますMax()
:コレクション内の指定されたフィールドの最大値を返しますMin()
:コレクション内の指定されたフィールドの最小値を返しますSum()
:コレクション内の指定されたフィールドの値の合計を返しますAverage()
:コレクション内の指定されたフィールドの値の平均を返します
次のセクションでは、前述の各方法の例を示します。
数
次の例では、Count()
メソッドを使用して、Planets
コレクション内の要素の数をカウントします。
var planetCount = db.Planets.Count(); Console.WriteLine("Planet Count: " + planetCount);
次の例では、Count()
メソッドを使用して、hasRings
フィールドが true
に設定されている Planets
コレクション内の要素の数をカウントします。
var planetCountWithRings = db.Planets.Count(p => p.hasRings); Console.WriteLine("Planet Count with Rings: " + planetCountWithRings);
LongCount
次の例では、LongCount()
メソッドを使用して Planets
コレクション内の要素の数をカウントし、その結果を long
として返します。
var planetCountLong = db.Planets.LongCount(); Console.WriteLine("Long Planet Count: " + longCount);
次の例では、LongCount()
メソッドを使用して、hasRings
フィールドが true
に設定されている Planets
コレクション内の要素の数をカウントし、その結果を long
として返します。
var planetCountLongWithRings = db.Planets.LongCount(p => p.hasRings); Console.WriteLine("Long Planet Count with Rings: " + planetCountLongWithRings);
Any
次の例では、Any()
メソッドを使用して、Planets
コレクション内のいずれかの要素で hasRings
フィールドが true
に設定されているかどうかを確認します。
var results = db.Planets.Any(p => p.hasRings); foreach (var p in results) { Console.WriteLine("Planet with Rings: " + p.name); }
Max
次の例では、Max()
メソッドを使用して、Planets
コレクション内の orderFromSun
フィールドの最大値を検索します。
var furthestPlanet = db.Planets.Max(p => p.orderFromSun); Console.WriteLine("Furthest Planet: " + furthestPlanet.name);
Min
次の例では、Min()
メソッドを使用して、Planets
コレクション内の orderFromSun
フィールドの最小値を検索します。
var closestPlanet = db.Planets.Min(p => p.OrderFromSun); Console.WriteLine("Closest Planet: " + closestPlanet.Name);
合計
次の例では、Sum()
メソッドを使用して、Planets
コレクション内の mass
フィールドの合計を求めます。
var totalMass = db.Planets.Sum(p => p.mass); Console.WriteLine("Total Mass of Planets: " + totalMass);
平均
次の例では、Average()
メソッドを使用して、Planets
コレクション内の mass
フィールドの平均値を検索します。
var averageMass = db.Planets.Average(p => p.mass); Console.WriteLine("Average Mass of Planets: " + averageMass);
詳細情報
MongoDBの集計の詳細については、 MongoDB Serverマニュアルの 集計操作ガイドを参照してください。
このガイドで説明するメソッドの詳細については、次の .NET API ドキュメントへのリンクを参照してください。