2015-08-26 268 views
0

LINQ查詢返回指定類型的我有這個疑問:與匿名類型

DbQuery<Logs> logs = context.GetQuery<Logs>(); 
var MessageLogs = 
    logs.Where(
     s => 
      s.DATE == date.Date 
     .GroupBy(s => new {s.DATE, s.ID}) 
     .Select(
      g => new {Date = g.Key.DATE, SID = g.Key.ID, Count = g.Count()}) 
     .GroupBy(x => x.SID, x => new {x.Date, x.Count}); 

,我有這兩個類新:

public class Data 
{ 
    public Values[] Val { get; set; } 
    public string Key { get; set; } 
} 

這:

public class Values 
{ 
    public string type1 { get; set; } 
    public string type2 { get; set; } 
} 

所有我想要做的是使用該查詢返回數據的類型。 類中的鍵數據是SID,值列表應該是count和date,分別爲type1和type2。 我知道我可以用匿名類型做到這一點,但我不知道如何,我嘗試了很多方法,但他們都錯了。

EDIT: 

我有這個疑問

logs.Where(
     s => 
      s.DATE == date.Date 
     .GroupBy(s => new {s.DATE, s.ID}) 
     .Select(
      g => new {Date = g.Key.DATE, SID = g.Key.ID, Count = g.Count()}) 

該查詢返回是這樣的:

key date  count 
---------------------------- 
1021 2012  1 
1021 2013  5 
1022 2001  10 
1023 2002  14 

我想是的基礎上每個ID實際上返回類型值 的清單應是此ID的數據類型是關鍵的前例

key=1021 and Values[] should be type1=2012, type2=1 and type1=2013, type2=5 
+0

LINQ查詢不會編譯...我不清楚你想要實現什麼,此刻......爲什麼按日期按日期進行分組? –

+0

@JonSkeet我試圖讓它更清晰 – someone

+0

你還沒有修復查詢,以便它可以編譯...你現在有兩個相同的斷開的查詢。現有的查詢是相當不相關的,說實話 - 所有這一切很重要的是輸出的形狀。 –

回答

2

鑑於當前的查詢返回鍵/日期/計數元素,它聽起來就像你可能只是想:

var result = query.GroupBy(
    x => x.Key, 
    (key, rows) => new Data { 
     Key = key, 
     Val = rows.Select(r => new Values { type1 = r.Date, type2 = r.Count }) 
       .ToArray(); 
    }); 

基本上this overload需要:

  • 鍵選擇
  • 將鍵和匹配行轉換爲結果元素(在您的案例中爲Data的實例)