2014-05-07 29 views
0

我需要組使用LINQ通過揚聲器問題清單:的GroupBy使用LINQ C#中的相關實體

public partial class Question 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public DateTime Date { get; set; } 

    public string Description { get; set; } 

    [ForeignKey("Speaker")] 
    public int Speaker_Id { get; set; } 
    public virtual Speaker Speaker { get; set; } 
} 

public partial class Speaker 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public string Title { get; set; } 
} 

我需要創建分組通過揚聲器的問題的列表:

Question.Date | Speaker.Name | Question.Description 

我來到這裏,但它不工作:

db.Questions.Select(c => new 
      { 
       c.Date, 
       c.Description, 
       c.Speaker.Id 
      }) 
      .ToList() 
      .GroupBy(c => new { c.Id, c.Date, c.Description }) 
      .Select(g => new Question 
      { 
       Date = g.Key.Date, 
       Speaker = db.Spkeakers.Where(o => o.Id == g.Key.Id).FirstOrDefault(), 
       Description = g.Key.Description 
      }) 
      .ToList()); 

它按日期排序,而不是由議長分組。

+0

到目前爲止你做了什麼。這表明你沒有付出任何努力,而是一個「爲我編碼」的問題,而不是一個問題的問題。 – Hogan

+0

嗨Hogan,我正在用代碼編輯問題。 – Patrick

+0

每行是否有不同的日期? –

回答

0

您在group by子句中包含Date(一個DateTime類型)。很有可能每個行都有不同的日期。如果該屬性對於您的數據爲真,則按日期分組本質上是由唯一標識符分組的。相反,也許嘗試按日,月,年等進行分組,按日期進行分組。還可以按speakerId進行分組,並且只按日期排序。

+0

我無法按發言者排序,然後按日期排序? – Patrick

+0

我覺得你很迷惑小組。 –

+0

也許編寫等效的SQL將幫助您瞭解LINQ的組和按功能排序之間的差異。請參閱http://www.codeducky.org/sql-queries-in-linq/#group-by。 –

0

要通過揚聲器和日期順序做到這一點:

var result = db.Questions 
        .OrderBy(t => t.Speaker_Id) 
        .ThenBy(t => t.Date); 

你這是怎麼通過揚聲器組,並計數:

var result = db.Questions 
        .GroupBy(t => t.Speaker_Id) 
        .Select(g => new { Speaker_Id = g.Key, count = g.Count() }); 

這是你如何證明這個表訂購按日期

var result = db.Questions 
        .OrderBy(t => t.Date) 
        .Select(item => new { Date = item.Date, Name = item.Speaker.Name, D = item.Description }); 

注意,如果你想要一個問題列表作爲你的結果,那麼最後的選擇是不需要的。

+0

我覺得我在這裏犯了一個錯誤,因爲我試圖按照Speaker_Id排序,並且該列表是我想要的,所以非常抱歉我的錯誤,並花時間。 – Patrick

+0

哦...你所要做的只是按speaker_id排序並做一個選擇? – Hogan

+0

是的,它似乎是這樣的,並有記錄是按時間插入的,他們是按上市後的日期排列由發言者排序 – Patrick