簡體   English   中英

將我的 SQL 轉換為 LINQ 並且我收到 System.InvalidOperationException: Client side GroupBy is not supported 錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM