在处理 Microsoft 365 数据(如电子邮件、日历、联系人或任务)时,并不总是需要检索所有项目。能够在电子邮件应用程序中对特定数据属性进行过滤、排序和检索也很有用。例如,按发件人过滤邮件、按日期排序日历事件或仅获取少数字段都可以帮助保持应用程序的快速响应。

这就是 OData 查询发挥作用的地方。Microsoft Graph 支持 OData,帮助开发人员在服务器上直接过滤、排序和选择数据,甚至在将数据发送到应用程序之前就完成这些操作。这样可以实现更快的性能、更小的负载以及更灵敏的应用程序。

Aspose.Email for .NET 使此过程变得轻松,使用其 [ODataQueryBuilder][2] 类。在本文中,我们将探讨它的工作原理以及如何使用它在 C# 中构建动态且强大的 Microsoft Graph 查询。

为什么使用 OData 查询?

Microsoft Graph API 提供了丰富的功能,但在手动构建查询时可能会比较复杂。OData 参数支持服务器端过滤、排序、分页和属性选择,从而最大限度地减少客户端处理。此方法通过减少数据传输并加快响应时间来提升效率,使您的应用程序更快且更具可扩展性。

通过 OData 支持,您现在可以:

  • 使用自定义条件过滤消息、联系人或事件。
  • 通过 OrderBy 对数据进行升序或降序排序。
  • 仅选择所需属性以最小化负载大小。
  • 使用 TopSkip 实现分页,适用于大型邮箱。
  • 使用 Expand 展开相关实体(例如附件)。
  • 对数据集进行计数和搜索,以加快访问速度。

这些功能可通过新的 [ODataQueryBuilder][2] 类以类型安全的方式访问。

用于在 C# 中构建 Microsoft Graph 查询的 .NET 组件

Aspose.Email for .NET 是一套功能强大的电子邮件处理 API,使开发人员能够在 C# 中直接操作 Microsoft 365、Exchange 和 Outlook 数据。它支持对常用电子邮件格式(如 MSG、EML、PST 和 MBOX)的读取和写入,并且能够与包括 Microsoft Graph API 在内的各种协议和服务集成。

使用内置的 [ODataQueryBuilder][2],您可以在 C# 中构建动态且类型安全的 OData 查询。这使得过滤、排序以及检索特定的邮箱数据——邮件、联系人或日历事件——变得轻而易举,无需手动编写复杂的查询字符串。

通过将查询逻辑卸载到 Microsoft Graph 服务器,Aspose.Email for .NET 帮助开发人员创建更快、更高效且可扩展的应用程序,以与 Microsoft 365 数据进行交互。

要开始使用,请在您的 .NET 项目中安装 Aspose.Email NuGet 包:

Install-Package Aspose.Email

此软件包包含满足您需求的所有必要类。

介绍 ODataQueryBuilder

[Aspose.Email.Clients.Graph.ODataQueryBuilder][2] 类旨在简化您编写 Graph 查询的方式。您可以将其与多个 Graph 客户端方法一起使用,包括:

  • ListFolders
  • ListMessages
  • ListContacts
  • ListCalendarItems
  • ListAttachments
  • ListCategories
  • ListOverrides
  • ListRules
  • ListTaskLists
  • ListTasks
  • ListNotebooks

每个都支持一个可选的 ODataQueryBuilder 参数,用于在 Graph 请求中直接进行高级过滤、排序、分页和选择。

实用示例:筛选和排序邮箱数据

下面的代码示例演示了基本和高级查询场景。它展示了文件夹排序和高级消息过滤,说明了用于排序、条件、分页、选择字段以及相关实体展开的 OData 参数。

var accessParameters = Settings.User1;
var provider = new AzureConfidentialTokenProvider(
    accessParameters.TenantId,
    accessParameters.ClientId,
    accessParameters.ClientSecret);

var client = GraphClient.GetClient(provider, accessParameters.TenantId);
client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";

// List folders sorted by name
var builder = new ODataQueryBuilder { OrderBy = "name asc" };
var folders = client.ListFolders(builder);
foreach (var folder in folders)
    Console.WriteLine(folder.DisplayName);

// Advanced message filtering
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
builder = new ODataQueryBuilder {
    Filter = "startswith(name,'A')",
    OrderBy = "name asc",
    Top = 10,
    Skip = 5,
    Select = new[] { "name", "age" },
    Expand = new[] { "children", "parents" },
    Count = true,
    Search = "\"John Doe\"",
    Format = "json"
};
var msgs = client.ListMessages(folderId, builder);
foreach (var msg in msgs)
    Console.WriteLine(msg.Subject);

真实世界场景

考虑一些实际场景,在这些场景中可以使用 [ODataQueryBuilder][2] 来增强在 .NET 应用程序中处理 Microsoft Graph 数据的工作:

1. UI Folder Lists
按字母顺序对文件夹进行排序 [OrderBy][3] = "name asc",以获得整洁的用户界面。

2. 自定义过滤
使用 [Filter][4] 来查找来自特定发件人或具有特定主题的邮件。

3. 大型邮箱分页
结合 [Top][5] 和 [Skip][6] 将庞大的邮箱拆分为可管理的结果。

4. 选择特定属性
仅获取所需字段,使用 [Select][7] 可最小化负载并提升性能。

5. 包含相关数据
使用 [Expand][8] 在单个查询中包含附件、类别或线程。

有效使用 OData 的技巧

  • 确认您的 GraphClient 正确指定了 ResourceResourceIdEndPoint
  • 选择合适的身份验证提供程序,例如 [AzureConfidentialTokenProvider][13]。
  • 将 [Filter][4]、[Select][7]、[OrderBy][3] 和 [Top][5] 组合使用,以实现最佳查询。
  • 利用 [Count][14] 获取总项数,而无需加载所有数据。
  • 为分页逻辑做好准备,以高效处理大型数据集。

结论

在本文中,我们学习了如何使用 Aspose.Email for .NET 库的 [ODataQueryBuilder][2] 类来构建和执行 Microsoft Graph 查询。无需手动编写 OData 语法,您现在可以直接在 C# 代码中创建类型安全、动态且可读的查询。Aspose.Email for .NET 中引入的 OData 查询支持使开发人员能够构建更智能、更高效的应用程序,以便与 Microsoft Graph 交互。

准备好使用 Microsoft Graph 构建更快、更高效的 .NET 应用程序了吗?

另请参阅