[英]Converted my SQL to LINQ and I am getting System.InvalidOperationException: Client side GroupBy is not supported error
我收到未處理的異常。 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;
如果 Label to Image 是一對多關系,您還必須使用Any
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.