返回具有匿名类型的linq查询的指定类型

时间:2015-08-26 12:02:43

标签: c# linq lambda anonymous-types

我有这个问题:

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});

我有这两个classess:

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,值列表应该是计数,日期应为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

1 个答案:

答案 0 :(得分:2)

鉴于您当前的查询返回带有键/日期/计数的元素,听起来您可能只是想要:

df=group_by(df,Product,term)
summarise(df,sum=sum(Quantity))

基本上this overload需要:

  • 来源
  • 键选择器
  • 从键和匹配行到结果元素的转换(在您的情况下为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(); }); 的实例)