C# Queryable类

发布时间:2024年01月23日


前言

C# 学习入门系列,C# 中的 Queryable类


一、Queryable

C#中的Queryable是一个用于查询数据的强类型工具。它提供了一组扩展方法,可以用于在各种数据源(如数据库、集合等)上执行查询操作。

Queryable的方法旨在与LINQ(Language Integrated Query)一起使用,使开发人员能够以与数据源无关的方式编写查询语句。它提供了一些常见的查询操作,如过滤、排序、投影和聚合等。

二、Queryable类中的方法大致分类

为了使用Queryable,需要引用System.Linq命名空间,该命名空间提供了Queryable类。Queryable类中的方法大致可以分为以下几类:

  1. 过滤操作:Queryable提供了Where方法,用于选择满足指定条件的元素。
  2. 排序操作:Queryable提供了OrderBy和OrderByDescending方法,用于按指定的键对元素进行排序。
  3. 聚合操作:Queryable提供了一系列聚合方法,如Count、Sum、Average、Min和Max等,用于计算序列中元素的总数、总和、平均值、最小值和最大值等。
  4. 投影操作:Queryable提供了Select方法,用于从序列中选择指定的属性或变换元素的类型。
  5. 连接操作:Queryable提供了Join、GroupJoin和GroupBy等方法,用于连接多个序列或按指定的键进行分组。
  6. 分页操作:Queryable提供了Skip和Take方法,用于进行分页操作,选择指定数量的元素。
  7. 其他操作:Queryable还提供了Distinct、Any、All、Contains、FirstOrDefault等方法,用于去重、判断序列是否包含指定元素、判断是否所有元素都满足指定条件等。

三、与Lambda表达式结合使用

使用Queryable时,可以将其与Lambda表达式结合使用来进行数据查询和筛选。以下是一个示例:

假设有一个名为"students"的数据集,包含了学生的姓名、年龄和成绩信息。

首先,我们将数据集转换为一个Queryable对象:

var query = students.AsQueryable();

接下来,我们可以使用Lambda表达式来筛选数据。例如,我们想要查询年龄大于18岁的学生:

var filteredQuery = query.Where(s => s.Age > 18);

我们还可以使用Lambda表达式来进行数据的排序。例如,我们想要按照成绩从高到低的顺序对学生进行排序:

var sortedQuery = query.OrderByDescending(s => s.Grade);

最后,我们可以使用Lambda表达式来选择需要的数据列。例如,我们只需要学生的姓名和成绩信息:

var selectedQuery = query.Select(s => new { s.Name, s.Grade });

最终,我们可以通过调用ToList方法来执行查询并获取结果:

var result = selectedQuery.ToList();

通过这样的方式,我们可以灵活地使用Queryable和Lambda表达式来进行数据的查询、筛选、排序和选择。

四 、Queryable 与java的Stream 相比较

在C#和Java中,Queryable和Stream都是对集合进行操作的高级抽象,允许以声明性方式处理数据。但是,由于它们分别来自两种不同的语言和框架,因此存在一些关键的异同点。

基本概念

C# 的 Queryable

Queryable 是 LINQ (Language Integrated Query) 的一部分,它允许开发者使用类似于 SQL 的语法对数据进行查询。Queryable 主要用于数据库上下文,允许你直接在数据源上执行查询。

Java 的 Stream

Stream API 是 Java 8 引入的一个新特性,用于处理集合。它允许你以声明性方式处理数据,执行各种转换和过滤操作。Stream 主要用于内存中的集合操作。

查询语法

Queryable

C# 的 Queryable 使用 LINQ 语法,这和 SQL 有很多相似之处。例如:

var query = from c in dbContext.Customers  
            where c.Age > 18  
            select c;

Stream

Java 的 Stream 使用更加函数式的方式,并且是声明性的。例如:

List<String> result = list.stream()  
    .filter(s -> s.length() > 3)  
    .collect(Collectors.toList());

性能和延迟执行

Queryable

Queryable 通常与数据库交互,这意味着查询可能会在数据实际被检索时才执行,这种特性被称为延迟执行。另外,数据库查询通常比内存中的操作更加复杂和资源密集型,因此性能方面可能会有所不同。

Stream

Stream API 在 Java 中主要用于内存中的集合操作。由于操作是在内存中进行的,所以性能通常比数据库查询要好。延迟执行不是 Stream 的一个主要特性。

实际项目选择考虑因素
  • 数据来源:如果你的数据来自数据库,那么 Queryable 可能更合适;如果你的数据来自内存集合,那么 Stream 可能更合适。
  • 查询复杂性:如果查询非常复杂,使用 Queryable 可能更容易阅读和维护;简单的查询两者都可以。
  • 延迟执行:如果你的项目需要延迟执行查询,那么 Queryable 可能更适合;如果你需要立即执行查询,那么 Stream 可能更适合。
  • 性能:在大多数情况下,Stream 的性能会优于 Queryable,特别是在处理内存中的数据时。然而,对于数据库交互,Queryable
    可能需要在网络和数据库层面进行更多的优化。
  • 语言和框架支持:考虑项目所使用的语言和框架。如果使用的是 C# 和 Entity Framework,那么 Queryable 可能更加合适;如果是 Java 和 Spring,那么 Stream 可能更加合适。

总结

以上就是今天要讲的内容,本文介绍了C#中的Queryable 类,接着与Java的stream 简单的对比了一下。

文章来源:https://blog.csdn.net/Bruce__taotao/article/details/135760280
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。