有关一个linq语句的问题,求指点

aierda 2020-03-17 02:25:41
我起初在系统中使用的是ef core 2.1版本,下面的这条linq语句没有问题。

var query = (from a in _aRepository.GetAll()
.Where(t => t.TenantID.ToString() == teantID)
join b in _bRepository.GetAll()
on a.bID equals b.Id
select new B
{
Id = b.Id,
ParentID = b.ParentID,
Number = b.Number,
Name = b.Name,
UserName = a.StaffName
}).GroupBy(t => t.UserName).Select(t => new BDto()
{
Id = string.Join(",", t.Select(t => t.Id)),
ParentID = string.Join(",", t.Select(t => t.ParentID.ToString())),
Number = string.Join(",", t.Select(t => t.Number.ToString())),
UserName = c.Key,
Name = string.Join(",", t.Select(t => t.Name))
});


但是升级ef core3.1之后呢,这条查询语句报错了,说是“未将对象引用到实例”。错误的地方出现在
t.Select(t => t.Id)中,后来我查了些资料,对这条linq语句进行了修改,即在GroupBy之前加上AsEnumerable<B>()
最后变成这样:
var query = (from a in _aRepository.GetAll()
.Where(t => t.TenantID.ToString() == teantID)
join b in _bRepository.GetAll()
on a.bID equals b.Id
select new B
{
Id = b.Id,
ParentID = b.ParentID,
Number = b.Number,
Name = b.Name,
UserName = a.StaffName
}).AsEnumerable<B>().GroupBy(t => t.UserName).Select(t => new BDto() //AsEnumerable<B>()为新增
{
Id = string.Join(",", t.Select(t => t.Id)),
ParentID = string.Join(",", t.Select(t => t.ParentID.ToString())),
Number = string.Join(",", t.Select(t => t.Number.ToString())),
UserName = c.Key,
Name = string.Join(",", t.Select(t => t.Name))
});
这样的确是不报错了,但是我发现在toList之前,这条语句已经获取结果了,也就是说AsEnumerable已经访问了数据库了
。假如我要做分页查询,这种效率应该会比较低。因为它是把数据先从数据库加载了,然后再分页的,不是吗?
问题1,为什么升级ef core后会报错
问题2,怎么实现不报错,又保证之前的查询效率。
...全文
225 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierda 2020-03-24
  • 打赏
  • 举报
回复
引用 1 楼 Hello World, 的回复:
linq+lambda? 用一种语法来写呢
linq中基本都不少了lambda啊,跟这个有关系吗? 升级前都是好好的,没有任何问题,为什么升级这后反而不行了呢?
Hello World, 2020-03-18
  • 打赏
  • 举报
回复
linq+lambda?
用一种语法来写呢

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧