笔记:Linq 错误写法集合

本文探讨了Entity Framework(EF)查询中的常见错误及其优化方法,包括避免数据量倍增的问题和正确使用IQueryable与IEnumerable进行数据处理。通过具体示例展示了如何在EF查询中有效地使用分组和内存操作,以提高应用程序的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019-11-10 [低级错误]

_provider.vw_order_stages_work_count.AsNoTracking().GroupBy(x => x.stage).ToList()

注:该语句可以正常的执行,不会报错;产生的问题是表自身关联查询,数据量倍增

暂时这样子修改,会按stage分组,数据量正常,暂时还没研究这样子是否存在性能问题

//视图数据全部需要所以直接ToList,减少查询数据库的交互

_provider.vw_order_stages_work_count.AsNoTracking().ToList();

qry.GroupBy(x => x.stage);

2019-11-20

正确写法:

EF 查询直接使用 IQueryable<T> 在select中new 对象会抛出异常,需要转为 IEnumerable<T> 在select中才可以new 新的复杂对象,既需要将最终数据载入到内存中操作,据说是 EF 在查询中无法知道new 的新对象与实体的映射关系(注:感觉这个说法不太正确)

private IEnumerable<T> FormatProductProcessDayOutputData<T>(IEnumerable<T> qry) where T : vw_ProductProcess_DayOutputData, new()
        {
            var list = qry.Select(x => new T
            {
                is_social_security_card = x.is_social_security_card == "1" ? "社保" : "非社保"
            });
            return list;
        }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值