c# linq with group by and join 抛出异常
Posted
技术标签:
【中文标题】c# linq with group by and join 抛出异常【英文标题】:c# linq with group by and join throwing exception 【发布时间】:2020-08-13 13:38:18 【问题描述】:(from p in this.m_dbContext.Patient
join b in (from a in this.m_dbContext.Appointments
join p in this.m_dbContext.Patient on a.Patientid equals
p.Patientid
where a.Doctorid == doctorid && a.Clinicid == clinicid
group a by a.Patientid)
on p.Patientid equals b.FirstOrDefault().Patientid
orderby p.Name
select new
p.Patientid,
p.Clinicid,
p.Name,
p.Mobilenumber,
p.Gender,
p.Dob,
p.Age,
p.Address,
p.City,
p.State,
p.Pincode
).ToList().Count();
运行时出现以下异常,我使用 group by 来删除结果集中的重复项
例外:
无法翻译 LINQ 表达式“FirstOrDefault(GroupByShaperExpression: KeySelector: a.patientid, ElementSelector:EntityShaperExpression: EntityType: Appointments ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False)”。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
【问题讨论】:
是的,你确实得到了那个例外。你的问题是什么?请记住,我们不知道您了解或不了解正在发生的事情。让我们知道您了解多少以及在哪里需要帮助。异常本身就一种潜在的解决方法(切换到客户评估)提供了建议,这是一种可接受的解决方法吗?请写一个完整的问题,并附上我们回答所需的所有细节。 是否有使用 FirstOrDefault 的特定原因?您确定不需要其他患者记录吗? 【参考方案1】:也许你的 groupby 可以改变来克服这个障碍。将 GroupBy linq 查询转换为适当的 sql 查询的复杂性仍然是 dotnetcore 的一个持续开发问题。
编辑: 我在 Github 上看到一个已关闭的问题:Query with GroupBy or GroupJoin throws exception #17068 但我不确定他们是否仍在解决 GroupBy 问题,或者它是否已修复,或者他们是否不会对此采取任何措施。
也许您可以将查询更改为以下内容:
请注意,我在计数之前删除了.ToList()
,因为如果您只需要计数,这对我来说似乎有点矫枉过正。
var patientIds = (from a in this.m_dbContext.Appointments
join p in this.m_dbContext.Patient on a.Patientid equals p.Patientid
where a.Doctorid == doctorid && a.Clinicid == clinicid
select a.Patientid).Distinct();
var items = (from p in this.m_dbContext.Patient
join patientId in patientIds on p.Patientid equals patientId
orderby p.Name
select new
p.Patientid,
p.Clinicid,
p.Name,
p.Mobilenumber,
p.Gender,
p.Dob,
p.Age,
p.Address,
p.City,
p.State,
p.Pincode
).ToList();
或者,如果您只需要计数:
var count = (from p in this.m_dbContext.Patient
join patientId in patientIds on p.Patientid equals patientId
orderby p.Name
select new
p.Patientid
).Count();
【讨论】:
以上是关于c# linq with group by and join 抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
C# Linq group by 和 group by into 运用实例
.NET(C#) System.Linq中实现多列group by(分组)的示例代码