2015-08-26 215 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的实例)