关于做完 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,文心一言,谷歌...........最好是走投无路的时候,再问问其他懂得领导 或者同事,都很忙),还有多看看别人的代码,借鉴借鉴 ,多沟通,在一个就是自己多想一想为什么这样写,不这样写行不行。。。。加油!你一定行
如果对你有帮助记得点赞收藏哦 谢谢!