簡體   English   中英

Linq查詢(包括)對聯接記錄進行計數

[英]Linq query with Include to count joined records

我正在使用與Entity Framework的Linqpad連接來形成我的Linq查詢,這非常適合查看結果而無需運行您的應用程序。無論如何,我有一個Event表,該表與EventStudent表相連。EventStudent表將具有每個事件0到許多記錄。我想返回一個事件的日期和標題以及參加的學生人數。EventStudent表中有該學生以及一個布爾值“ attended”字段。

通過此查詢,我可以獲得每個事件的所有事件數據和所有學生數據-很好!

from ev in Events.Include("EventStudents")
where (ev.StartDate >= new DateTime(2012, 7, 1) && ev.StartDate <= new DateTime(2013, 6, 30))
orderby ev.StartDate descending
select ev

我想要的是活動信息和參加活動的COUNT個學生,因此我可以將其綁定到網格。 這是我嘗試過的:

from ev in Events.Include("EventStudents")
where (ev.StartDate >= new DateTime(2012, 7, 1) && ev.StartDate <= new DateTime(2013, 6, 30))
orderby ev.StartDate descending
select new { ev.EventID, ev.StartDate, ev.Title, ev.EventStudents.Count() }

但是我收到一個錯誤消息“匿名類型成員聲明符必須為簡單名稱...”。 好的,但是,如何將我的事件數據和學生人數全部以一種類型綁定到網格? 如果很重要-網格具有“選擇”列,這就是為什么包含事件ID的原因-它將隱藏在網格中。 另外,網格將具有排序和過濾功能。 而且...如何從Linq查詢返回僅具有日期的日期(沒有時間?)。

謝謝!

嘗試這個。 這是通過使用.Date屬性從StartDate獲取日期的。 並將Count()調用的結果命名為“ StudentCount”。

select new { ev.EventID, ev.StartDate.Date, ev.Title, StudentCount = ev.EventStudents.Count() }

您的查詢很好。 唯一的問題是您需要為Count成員提供一個名稱。 像這樣:

from ev in Events.Include("EventStudents")
where (ev.StartDate >= new DateTime(2012, 7, 1) && ev.StartDate <= new DateTime(2013, 6, 30))
orderby ev.StartDate descending
select new 
{ 
    ev.EventID, 
    ev.StartDate, 
    ev.Title, 
    Count = ev.EventStudents.Count() 
}

MSDN

如果未在匿名類型中指定成員名稱,則編譯器將為匿名類型成員提供與用於初始化它們的屬性相同的名稱。 您必須為使用表達式初始化的屬性提供名稱...

您還提到您只想獲取日期部分。 您可以使用TruncateTime函數,如下所示:

from ev in Events.Include("EventStudents")
where (ev.StartDate >= new DateTime(2012, 7, 1) && ev.StartDate <= new DateTime(2013, 6, 30))
orderby ev.StartDate descending
select new 
{ 
    ev.EventID, 
    StartDate = EntityFunctions.TruncateTime(ev.StartDate.Date), 
    ev.Title, 
    Count = ev.EventStudents.Count() 
}

請注意,您可能必須首先將此函數的輸入轉換為Nullable<DateTime> ,如下所示:

    StartDate = EntityFunctions.TruncateTime((DateTime?)ev.StartDate.Date), 

暫無
暫無

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

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