Docs 菜单
Docs 主页
/ /
/ / /

查询数据

Entity Framework Core 允许您在不显式运行数据库命令的情况下处理应用程序中的数据。 要查询数据,请使用语言集成查询 (LINQ) 语法。 LINQ 允许使用特定于 C# 的关键字和操作符写入强类型查询。 运行应用程序时,EF Core 提供程序会自动转换 LINQ 查询,并使用MongoDB查询API在数据库上运行这些查询。

在本指南中,您可以查看配置为使用 EF Core 提供程序的应用程序的常见查询操作示例。

提示

要学习;了解如何配置应用程序以使用 EF Core 提供程序,请参阅配置 EF Core 提供程序。

使用 FirstOrDefault()方法查找单个实体,或使用Where()方法查找多个实体。

FirstOrDefault()方法返回在collection中找到的与搜索条件匹配的第一个实体;如果未找到匹配的实体,则返回null

以下代码使用FirstOrDefault()方法从名为PlanetsDBSet中查找name字段为 "Mercury" 的行星,并将行星名称打印到控制台:

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

提示

按降序排序

您可以使用OrderByDescending()方法按降序对查询结果进行排序。

您可以使用ThenBy()方法对查询执行二级排序。 ThenBy()方法根据指定的排序条件对OrderBy()方法的结果进行升序排序。 ThenBy()方法应链接到OrderBy()方法。

提示

按降序进行二级排序

您可以使用ThenByDescending()方法按降序执行二级排序。

以下代码使用OrderBy()ThenBy()方法查找所有行星,并按hasRings()字段对它们进行排序,并在name字段上进行辅助排序。

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

提示

对具有布尔值的字段进行排序时,字段值为false的实体显示在值为true的实体之前。

EF Core 提供程序支持以下标量聚合方法:

  • Count():返回集合中与谓词匹配的元素数或文档数

  • LongCount():以 long 的形式返回集合中的元素数量,或与谓词匹配的文档数量

  • Any():如果集合中的任何元素与谓词匹配,则返回 true

  • Max():返回集合中指定字段的最大值

  • Min():返回集合中指定字段的最小值

  • Sum():返回集合中指定字段的值的总和

  • Average():返回集合中指定字段值的平均值

以下部分举例说明了上述每种方法。

以下示例使用 Count() 方法计算 Planets集合中元素的数量:

var planetCount = db.Planets.Count();
Console.WriteLine("Planet Count: " + planetCount);

以下示例使用 Count() 方法计算 Planets集合中 hasRings字段设立为 true 的元素数量:

var planetCountWithRings = db.Planets.Count(p => p.hasRings);
Console.WriteLine("Planet Count with Rings: " + planetCountWithRings);

以下示例使用 LongCount() 方法计算 Planets集合中元素的数量,并将结果作为 long 返回:

var planetCountLong = db.Planets.LongCount();
Console.WriteLine("Long Planet Count: " + longCount);

以下示例使用 LongCount() 方法计算 Planets集合中 hasRings字段设立为 true 的元素数量,并将结果作为 long 返回:

var planetCountLongWithRings = db.Planets.LongCount(p => p.hasRings);
Console.WriteLine("Long Planet Count with Rings: " + planetCountLongWithRings);

以下示例使用 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() 方法查找 Planets集合中 orderFromSun字段的最大值:

var furthestPlanet = db.Planets.Max(p => p.orderFromSun);
Console.WriteLine("Furthest Planet: " + furthestPlanet.name);

以下示例使用 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 文档链接:

后退

配置

在此页面上