好的,今天我们继续来学哈。

1、var elo = new EagerLoadOptions();

      elo.LoadWith(SCWPDetail.SCPMProperty);

      elo.LoadWithViewProperty();

贪婪加载(Eager Loading),目的是在查询主实体时​​自动加载其关联的导航属性数据​​,避免后续使用时触发延迟加载(Lazy Loading)导致的额外数据库查询。

LoadWith:声明主实体加载时​​必须同时加载​​的关联属性;

LoadWithViewProperty():强制加载​​视图属性​​(View Property),通常是计算字段、聚合结果或虚拟视图(非直接映射到数据库表的属性)。

2、 query.ToList(null, elo)

ToList<T>()是用于将其他类型的集合或查询结果 ​​显式转换为 List<T>类型的集合​​。第一个参数null是分页参数,这里应该是用于忽略分页,可能会返回大量的数据。第二个参数elo是加载相关贪婪参数配置,自动加载 elo中指定的导航属性(如 LoadWith配置的关联表)。

3、在代码 lists.Where(...).ToList()中,最后的 ToList()​会立即执行查询,并生成一个新的 List<T>表,不会更新原列表​​,而是生成一个包含过滤结果的新列表。

4、EntityList<T> datas = new EntityList<T>();  这里是存储最终返回的结果数据。

5、var equipIds = list

        .Where(p => p.T != null)

        .Select(p => p.T.LineId)

        .Distinct()

        .ToList();

此处的代码按这样排版会好看一些,where用于筛选,select用于提取,distinct用于去重;tolist生成。若 list数据量大,多次 WhereSelect可能影响性能,可以反过来先提取再筛选;

6、部分字符解释:

        6.1、在C#代码中,?.是 ​​空条件运算符(Null-conditional operator)​​,也称为​​安全导航运算符​​。它的作用是​​在访问对象的成员(属性、方法等)时,自动检查对象是否为 null​,从而避免因对象为 null而抛出 NullReferenceException异常。

        用法:object?.Member

如果 object为 null,整个表达式返回 null,​​不会继续访问 .Member​。如果 object不为 null,正常访问 .Member。

        6.2、X.Service.Resolve<T>()是一种 ​​依赖注入(Dependency Injection, DI),此处T是控制器通过依赖注入容器(如Autofac、Unity)解析 Controller实例;

        这个依赖注入一直说一个比较抽象的概念啊,我按自己查资料浅薄的理解描述下,就是类A有些功能需要借助类B实现,B是A的依赖,如果B在A的内部实例化的吧,两者就有较高的耦合,但是若B需要更改的话,A就也要跟着改很多地方很麻烦,所以把B从A里剥离出来,控制权交给一个第三方我们称为控制反转IOC Inversion Of Control)容器,再注入A里,完成A和B的解耦。

        引知乎大佬回答,总的一句话就是:本来A接受各种参数来构造一个对象,现在只接受一个参数——已经实例化的对象。

这篇先到这吧.

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐