C# 查询GroupBy之前的位置

C# 查询GroupBy之前的位置,c#,ravendb,C#,Ravendb,我有这样一个实体: public class Event { public string Code; public DateTimeOffset DateTime; } var results = session .Query<Event>() .Where(e => e.Code == code) .GroupBy(e => e.DateTime.Date) .ToList(); 我想按code过滤,然后按DateTi

我有这样一个实体:

public class Event
{
    public string Code;
    public DateTimeOffset DateTime;
}
var results = session
    .Query<Event>()
    .Where(e => e.Code == code)
    .GroupBy(e => e.DateTime.Date)
    .ToList();
我想按
code
过滤,然后按
DateTime.Date
分组。我试过这个:

var results = session
    .Query<Event>()
    .Where(e => e.Code == "123")
    .GroupBy(e => e.DateTime.Date)
    .ToList();
从结果查询中可以看出,
where
子句添加在
group by
子句之后,这解释了错误

那么如何在RavenDB中执行此查询呢

编辑:

我使用的
code
“123”只是一个例子。我需要它是一个传递给查询的变量,如下所示:

public class Event
{
    public string Code;
    public DateTimeOffset DateTime;
}
var results = session
    .Query<Event>()
    .Where(e => e.Code == code)
    .GroupBy(e => e.DateTime.Date)
    .ToList();
var结果=会话
.Query()
.Where(e=>e.Code==Code)
.GroupBy(e=>e.DateTime.Date)
.ToList();

首先,在:

但是,在您的情况下,您需要定义一个静态映射缩减索引来为您计算:
(汇总每个唯一日期的(过滤)文档数)
i、 e

==>在:

按照详细演练进行操作。

---------- 更新: 您可以使用以下map reduce索引聚合每个代码和日期“耦合”的文档数,然后使用“代码”进行查询

public class Result
{
      public string Code { get; set; }
      public string  Date { get; set; }
      public int NumberOfDocs { get; set; }
}

         Map = events => from event in events        
             select new Result  
             {          
                Code = event.Code
                Date = event.DateTime.Date             
                NumberOfDocs = 1         
             }     

         Reduce = results => from result in results  
             group result by new 
             {
               result.Code,
               result.Date
             }
             into g
             select new Result 
             {
                Code = g.Key.Code
                Date = g.Key.DateTime.Date,
                NumberOfDocs = g.Sum(x => x.NumberOfDocs )
             }

然后查询

List<Result> queryResults = session.Query< Result, <Index_Name> >()
                    .Where(x => x.Code == "some-code-number")
                    .ToList();

对不起,我忘了在问题上加些什么。我需要将代码作为参数传递给执行搜索的函数,值“123”只是一个示例。我应该为每个需要不同代码值的搜索创建索引吗?最后一个GroupBy是在调用.ToList()之后完成的吗?是否可以在Where之后应用GroupBy,而无需解析查询?我按照您的建议创建了索引,但出现了一个错误,即在Where之后添加GroupBy时,它无法识别表达式。是的,最后一个GroupBy是在您从ToList获得结果后在queryResults上完成的
queryResults.GroupBy(x => x.Date)