簡體   English   中英

EF Core 2.1分組依據

[英]EF Core 2.1 Group By for Views

我在SQL中有一個視圖,可以稱之為MyCustomView

如果我要編寫一個簡單的SQL查詢以進行計數和求和,則可以執行以下操作: SELECT COUNT(*), SUM(ISNULL(ValueA, ValueB)) FROM MyCustomView

是否可以在EF Core中翻譯該查詢?
我周圍的Diggin找到了提到GroupBy 1用戶的答案(但是,這似乎不適用於視圖),即

context .Query<MyCustomView>() .GroupBy(p => 1) .Select(grp => new { count = grp.Count(), total = Sum(p=>p.ValueA ?? p.ValueB)}

我遇到的問題是,每當我嘗試運行查詢時,我都會抱怨必須在客戶端上運行group by。
但是,如果我要使用上下文中的DbSet屬性替換.Query<MyCustomView>() ,則該查詢可以正常工作。 因此,我猜測這與我試圖在View上執行操作有關。
有沒有一種方法可以通過View實現此行為,或者我又是否可以使用EF Core來運氣:(

沒有索引索引時,眾所周知,查詢視圖的速度很慢。 相反,您可以先將View結果轉換為列表,然后查詢該列表。 它將消除查詢SQL端的視圖,並應加快整個過程。

context
.Query<MyCustomView>()
.ToList()
.GroupBy(p => 1)
.Select(grp => new { count = grp.Count(), total = Sum(p=>p.ValueA ?? p.ValueB)}

我會說,正確的解決方案(如果可以的話)是為視圖建立索引。

對於任何好奇的人(或者直到有人設法提供答案),我都設法通過創建如下linq查詢來使其工作:

const a = 1;        
context
.Query<MyCustomView>()
 // For some reason adding the below select lets it execute
.Select(p => new { p.ValueA, p.ValueB })
.GroupBy(p => a)
.Select(grp => new { count = grp.Count(), total = Sum(p=>p.ValueA ?? p.ValueB)})
.First();

另外,根據EF Core團隊的說法,此問題已在EF Core 3+中進行了分類,不幸的是,我還沒有升級到3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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