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)