有关一个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,怎么实现不报错,又保证之前的查询效率。
相关推荐
查看LINQ生成SQL语句的几种方法
在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。1.
C# LINQ查询
LINQ是Language-Integrated Query的缩写,它可以视为一组语言和框架特性的集合。LINQ可以对本地对象集合或远程数据源进行结构化的类型安全的查询操作。LINQ支持查询任何实现了接口的集合类型,无论是数组、列表还是XML DOM,乃至SQL Server数据库中的数据表这种远程数据源都可以查询。LINQ具有和这两大优点。
C# LINQ(一)概况
在LINQ前,先回顾下集合:集合基于ICollection、IList、IDictionary、IEnuerable接口及其泛型版本,例如IEnuerable&lt;T&gt;,IList和IDictionary均从ICollection接口派生,而ICollection接口又从IEnumerable接口派生。而泛型版本IEnumerable&lt;T&gt;也派生自IEnumerable,相当于...
LINQ TO SQL Null 查询
LINQ TO SQL Null 查询 在论坛里不止一次看到有网友提问关于LINQ NULL查询的问题了,现以微软NorthWind 数据库为例总结一下: 如查询这样一句SQL ,用LINQ如何实现? SELECT * FROM [Orders] AS [t0] WHERE ([t0].[ShippedDate]) IS NULL v 方法一: from o i
linq语句大全(笔记)
Linq语句大全是Linq语句的集合,涵盖了Linq的各种用法和场景。


