如何解决将我的SQL转换为LINQ,并且我得到了System.InvalidOperationException:不支持客户端GroupBy错误
我遇到了未处理的异常。 System.InvalidOperationException:当我尝试使用EntityFrameworkCore在C#应用程序中运行此LINQ查询时,不支持客户端GroupBy。
这是我的LINQ查询。
var test =
(from lbls1 in ctxt.Labels
join att in ctxt.Attributes
on lbls1.Id equals att.LabelId
join img in ctxt.Images
on lbls1.ImageId equals img.Id
where att.plate_region_conf >= min_region_conf
&& att.plate_code_conf >= min_code_conf
&& states.Contains(att.plate_state)
&& cameraid.Contains(img.CameraId)
&& !exclude_filename.Contains(img.Filename)
group lbls1 by new {
att.plate_code,att.plate_state
} into lbls1
select lbls1).ToList()
这是我创建并运行的原始SQL查询。
Select ImageId FROM Labels as l JOIN Attributes as a ON
a.LabelID = l.Id
JOIN Images as I
On l.ImageId = I.Id
Where
plate_state = states
AND plate_region_conf >= region_conf
AND plate_code_conf >= code_conf
AND plate_stacked = stacked
AND is_edge = edge
AND I.CameraId = cameraid
AND I.Filename <> filename
Group By plate_code,plate_state;
我读到的内容,客户端评估已从LINQ中删除,但是如果此代码转换为SQL,它仍然可以正常工作。我正在运行MySQL,并且确实删除了ONLY_FULL_GROUP_BY,因此它应该可以工作。任何建议都将不胜感激!
解决方法
您已使用SelectMany
,它引入了行重复。不必在谓词和导航属性中使用Any
函数,我希望您拥有它们。
var query =
from label in ctxt.Labels
where
label.Attributes.Any(att =>
att.plate_region_conf >= min_region_conf
&& att.plate_code_conf >= min_code_conf
&& states.Contains(att.plate_state)
)
&& cameraid.Contains(label.Image.CameraId)
&& !exclude_filename.Contains(label.Image.Filename)
select label;
如果“标签到图像”是“一对多”关系,则还必须使用Any
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。