2016-04-07 20 views
1

選擇總計數我有尋呼和我whant使用簡單的SQL(EF7)在相同的查詢選擇計數:EF核心尋呼。在同一個查詢

var selectSql = " SELECT TotalCount = COUNT(*) OVER(), E.* FROM [table] E ..."; 
var rows = context.Set<EventTable>().FromSql<EventTable>(selectSql, parameters.Select(p => p.Value).ToArray()).ToArray(); 

這種選擇的作品,但我沒有TOTALCOUNT財產在我的事件表類,因爲我不會在數據庫中獲取該屬性。

我試着從實體跟蹤得到TOTALCOUNT屬性:

var row = rows.First(); 
var entity = context.Entry(row); 
var totalCount = entity.Property<int>("TotalCount").CurrentValue; 

但後來我得到錯誤: 對實體類型「事件表」屬性「TOTALCOUNT」找不到。確保該屬性存在並已包含在模型中。

然後我嘗試在模型中添加屬性是這樣的:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<EventTable>(b => b.Property<int>("TotalCount")); 
} 

它,當我whant選擇做工精細,但將在插入一個例外,因爲在數據庫列不存在。 並且EF將在遷移時添加該列。但我注意到,如果在遷移之前生成我添加行b.Property(「TotalCount」);進入ModelSnapshot類,它將避免在遷移時添加屬性。但插入問題仍然存在。

我試圖創建另一個類:

[NotMapped] 
public class EventSearchTable : EventTable 
{ 
    [Column("total_count")] 
    [Required] 
    public int TotalCount { get; set; } 
} 

,然後做到這一點:

var rows = context.Set<EventSearchTable>().FromSql<EventSearchTable>(..); 

它可以在EF6,但不能在EF7,我得到錯誤:值不能爲空。 參數名稱:entityType因爲我的DbContext中沒有實體。如果我將在我的DbContext上添加EventSearchTable類,那麼它會期望像歧義等列,並將在遷移中創建表。

任何想法如何獲得財產 TotalCount

對不起,如果我的英文壞了。

回答

3

下面的查詢將得到在一次旅行的次數和頁面結果到數據庫

var query = context.Set<EventTable>(); 
var page = query.OrderBy(e => e.Id) 
       .Select(e => e) 
       .Skip(100).Take(100) 
       .GroupBy(e => new { Total = query.Count() }) 
       .FirstOrDefault(); 

if (page != null) 
{ 
     int total = page.Key.Total; 
     List<EventTable> events = page.Select(e => e).ToList(); 
} 
+2

當結果集是空的,但(至少在EF核心)這將失敗。頁面不爲空,但有一個內部的NullReferenceException。 –

+1

結果集爲空時它確實失敗。任何解決方案? –