当前位置: 首页 > article >正文

关于做完 C# 项目的问题总结

1. .Any()方法使用
可以与其他LINQ方法结合使用,以构建更复杂的查询。例如,你可以首先过滤集合,然后检查过滤后的集合是否包含任何元素:
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry", "Date" };  
  
bool hasLongFruitName = fruits.Where(f => f.Length > 5).Any();  
  
Console.WriteLine(hasLongFruitName); // 输出: True
重点是.where之后Any
  .Where(p => p.NAME.Any(x => x.BBB.Any(c => c.DDD== EEE)))

  • .Any()方法在执行时会遍历集合中的元素,直到找到满足条件的元素或遍历完整个集合。因此,对于大型集合,如果只需要检查是否存在满足条件的元素而不关心具体是哪些元素,.Any()方法通常比.Count().ToList()等方法更高效。
  • .Any()方法是扩展方法,定义在System.Linq.Enumerable类中。因此,你需要确保你的项目引用了System.Linq命名空间。

希望这些示例能帮助你理解如何在C#中使用.Any()方法!

 2. .Distinct()去重

 .Distinct().ToListAsync(cancellationToken);
直接用就好了

3.  Include      ThenInclude    使用  

在Entity Framework (EF) 中,Include 和 ThenInclude 方法用于执行急切加载(Eager Loading),这意味着在查询数据库时,会立即加载相关联的实体。这对于确保在访问导航属性时不会触发额外的数据库查询(即N+1问题)非常有用。

Include 方法用于指定要加载的直接关联实体,而 ThenInclude 方法则用于在已经通过 Include 方法加载的关联实体上进一步指定要加载的更深层次的关联实体。

请注意,Include 和 ThenInclude 方法是链式的,这意味着你可以根据需要连续调用它们来加载更深层次的关联实体。然而,每个 Include 或 ThenInclude 调用都会增加查询的复杂性,并可能影响性能。因此,只应加载确实需要的关联数据。

此外,如果你使用的是 EF Core 5.0 或更高版本,你还可以使用 ThenInclude 的重载形式来加载多个关联路径。但在大多数情况下,简单的链式调用就足够了。

4. .OrderBy(e => e.name) .ThenBy(e => e.name)的使用

在LINQ中,.OrderBy() 和 .ThenBy() 方法通常用于对集合进行排序。.OrderBy() 是主排序,而 .ThenBy() 是在 .OrderBy() 指定的排序基础上进行的次要排序(也称为“接着排序”或“二级排序”)

假设你有一个 Person 类,它有两个属性:FirstName 和 LastName。你想要首先根据 LastName 对人进行排序,然后在 LastName 相同的情况下根据 FirstName 进行排序。

5.  EF.Functions.Like() 模糊查询

在Entity Framework (EF) 中,EF.Functions.Like 方法用于在查询中执行类似 SQL 的 LIKE 操作。这对于在数据库中执行模式匹配查询非常有用,特别是当你想要根据某个字段的部分内容来筛选记录时。

EF.Functions.Like 方法接受两个参数:要检查的字段和要匹配的模式。模式可以包含通配符,如 %(表示任意数量的字符)和 _(表示单个字符)。

6.  关联之后判断非空: .Include(e => e.user) q.class!.name,
!就是判断  否则报错 

user.unitcode is null ? null : (UnitName)user.unitcode .Name

7. SingleOrDefaultAsync()

SingleOrDefaultAsync 是 Entity Framework (EF) 和其他类似 ORM (对象关系映射器) 框架中用于异步查询的方法。它用于从数据库中检索满足特定条件的单个实体,或者如果找不到满足条件的实体,则返回默认值(对于引用类型通常是 null)。

8.AsSplitQuery()

EF默认是按照单个查询的形式执行(即所有Include对象在一个SQL中取出),如果同一级别有多个集合导航时会产生严重的性能问题(笛卡尔爆炸现象)。可以使用AsSplitQuery()方法拆分查询解决问题

9. FirstOrDefault(),First()方法
数组有1件以上的数据时使用First()方法
数组有0件可能时使用FirstOrDefault()方法

10.  .OrderByDescending(x => x.aaa) .ThenByDescending(x => x.vvv)降序排列

  • .ThenByDescending(x => x.vvv):这个方法在 .OrderByDescending 之后使用,它会根据指定的属性 vvv 对已经根据 aaa 降序排序的元素进行进一步的降序排序。这意味着,对于具有相同 aaa 值的元素,它们将根据 vvv 的值进行降序排列。

11. var Result =ResultList.Find(x => user.getCode().Contains(x.aaa));

Find 方法在内部使用线性搜索,这意味着它会遍历整个集合来查找匹配的元素。如果 ResultList 很大,这可能会导致性能问题。如果可能的话,考虑使用更高效的数据结构或查询方法,如 LINQ 的 FirstOrDefault 方法与 Where 子句结合使用。

返回值:如果 Find 方法找不到匹配的元素,它将返回 null。因此,在使用 Result 变量之前,您应该检查它是否为 null,以避免空引用异常。

Lambda 表达式x => user.getCode().Contains(x.aaa) 是一个 Lambda 表达式,它定义了一个匿名函数,该函数接受一个参数 x 并返回一个布尔值,表示 user.getCode() 返回的字符串是否包含 x.aaa

方法调用user.getCode() 似乎在每次迭代时都会被调用。如果这个方法有副作用或计算成本很高,那么它可能会成为性能瓶颈。如果可能的话,考虑先调用 user.getCode() 并将结果存储在一个变量中,然后在 Lambda 表达式中使用该变量。

12..SumAsync

.SumAsync 是 Entity Framework (EF) 或其他支持异步操作的 LINQ 提供程序中的一个扩展方法,用于异步计算集合中数值类型属性的总和。与同步的 .Sum 方法相比,.SumAsync 不会在调用线程上阻塞,而是允许它继续执行其他任务,直到总和计算完成。

使用 .SumAsync 时,你通常需要在一个异步方法内部,并且该方法应该用 async 关键字标记。此外,你需要使用 await 关键字来等待 .SumAsync 方法的完成,并获取计算出的总和。

13.  Select 一个是查数据库用的  另一个是查到之后GetuserResult自己需要的结果

 var datas = await query
     .OrderByDescending(c => c.bbb)
     .Select(q => new
     {
         q.aaa,
        ),
     }).ToListAsync(cancellationToken);

 var elements = datas.Select(x => new GetuserResult( x.aaa, )).ToList();

我也是小白一名不过在做作业时,一定要好好查查(百度,csdn,文心一言,谷歌...........最好是走投无路的时候,再问问其他懂得领导 或者同事,都很忙),还有多看看别人的代码,借鉴借鉴 ,多沟通,在一个就是自己多想一想为什么这样写,不这样写行不行。。。。加油!你一定行 

如果对你有帮助记得点赞收藏哦 谢谢!


http://www.kler.cn/a/399067.html

相关文章:

  • 面试经典 150 题:20、2、228、122
  • 抽象java入门1.5.3.1——类的进阶
  • Flowable 构建后端服务(后端以及数据库搭建) Flowable Modeler 设计器搭建(前端)
  • 酒店行业数据仓库
  • 代码随想录第46期 单调栈
  • 【日常记录-Git】git log
  • STM32设计智能翻译手势识别加算法系统
  • 基于OpenCV的自制Python访客识别程序
  • Java基础-内部类与异常处理
  • Intern大模型训练营(八):Llamaindex RAG 实践
  • python核心语法
  • 树莓派(Raspberry Pi)picotool
  • RHCSA学习超详细知识点2命令篇
  • 开源vs闭源:你更看好哪一方?
  • 徒步中补给问题——贪心算法
  • 畜牧定位器
  • Linux 硬链接和软链接的使用场景有哪些?
  • [C/C++] 定位新表达式 placement new
  • Android 中的 Zygote 和 Copy-on-Write 机制详解
  • React 中如何解析字符串中的 html 结构
  • SpringBoot整合FreeMarker生成word表格文件
  • [Admin] Dashboard Filter for Mix Report Types
  • 27.<Spring博客系统③(实现用户退出登录接口+发布博客+删除/编辑博客)>
  • 使用OpenCV(C++)通过鼠标点击操作获取图像的像素坐标和像素值
  • 利用TinyML和IoT技术预测沙漠地区光伏电站清洁方法
  • Java LinkedList 详解