LINQ中的GroupBy

时间:2011-03-27 11:48:27

标签: c# .net asp.net linq-to-sql

我需要根据表中的Month对表进行分组。

查询就是这样:

var query =
    from a in db.Dates
    from b in db.Facts
    where a.Count_Key == b.Date_key
    select new
    {
        a.Month,
        b.Fact_key
    };

从这个查询我尝试按月分组

query = query.GroupBy(x => x.Month);
Grid1.DataSource = query;
Grid1.DataBind();

然后我收到以下错误:

  

无法隐式转换IGrouping   int?进入IQueryable

2 个答案:

答案 0 :(得分:1)

您无法重新分配回查询变量,因为这两个查询的结果是不同的类型。

您的第一个查询基本上是这样的:

IQueryable<'a> query =
    from a in db.Dates
    from b in db.Facts
    where a.Count_Key == b.Date_key
    select new
    {
        a.Month,
        b.Fact_key
    };

即。它返回匿名类型的直接IQueryable

您的第二个查询会返回IQueryable<IGrouping<'a>>,即匿名类型组的IQueryable

IQueryable<IGrouping<'a>> groupedQuery = query.GroupBy(x => x.Month);

因此,由于返回类型不同,您无法将分组结果分配回原始变量。

答案 1 :(得分:1)

你可以这样做:

var query2 = query.GroupBy(x => x.Month);
Grid1.DataSource = query2;
Grid1.DataBind();

问题是由于var query从其使用中隐式推断而引起的。 query类型为IQueryable<SomeAnonymousType>GroupBy方法返回IQueryable<IGrouping<int?, SomeAnonymousType>>。这些只是两种不同的类型。