首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raven Db查询

Raven Db查询
EN

Stack Overflow用户
提问于 2014-07-15 19:29:50
回答 1查看 37关注 0票数 0

我使用Map Reduce索引进行查询。并且我想选择filter by licenceId/licenceIds,它们可以是一个或多个,用在文本框中输入的逗号分隔

例如:

代码语言:javascript
复制
       L1                (select having LicenseId only L1)

       L1,L2           (select having LicenseId only L1 OR L2)

       L2,L3,L5      (select having LicenseId only L3 OR L3 OR L5)

以下是结果文档:

代码语言:javascript
复制
public class GrossSalesByRevenueClass

{

public string LicenseId { get; set; }

public string RevClass { get; set; }

public decimal GrossSales { get; set; }

public decimal NetSales { get; set; }

public int Quantity { get; set; }

public bool NonSales { get; set; }

public DateTime Day { get; set; }

public string DayName { get; set; }

public int Month { get; set; }

public int Quarter { get; set; }

public int Year { get; set; }

}

索引为:

代码语言:javascript
复制
public class IdxGrossSalesByRevenueClassByDay : AbstractIndexCreationTask<Ticket, GrossSalesByRevenueClass>
{

 public IdxGrossSalesByRevenueClassByDay()

{

Map = docs => from doc in docs
from c in doc.Coversfrom t in c.TicketItems
 select new
{
LicenseId = doc.LicenseId,
RevClass = t.RevenueClass,
GrossSales = t.TicketItemGross,
NetSales = t.NetPrice,
Quantity = t.Quantity,
NonSales = t.IsNonSales,
Day = doc.TicketDate.Date,
DayName = doc.TicketDate.ToString("ddd")
};

 Reduce = result => from r in result
 group r by new { r.NonSales, r.RevClass, r.Day, r.LicenseId } into g
 select new
{
LicenseId = g.Key.LicenseId,
RevClass = g.Key.RevClass,
GrossSales = g.Sum(x => x.GrossSales),
NetSales = g.Sum(x => x.NetSales),
Quantity = g.Sum(x => x.Quantity),
NonSales = g.Key.NonSales,
Day = g.Key.Day,
DayName = g.Select(x => x.DayName).FirstOrDefault(),
};

}

}

我的查询如下:

代码语言:javascript
复制
GrossSalesByRevenueClassCollection = session.Query<GrossSalesByRevenueClass, IdxGrossSalesByRevenueClassByDay>()

                    .TransformWith<GrossSalesByRevenueClassTransformer, GrossSalesByRevenueClass>()

                    .Where(x => x.Day >= d1 && x.Day <= d2 && (?????))

应该有许可证id列表(L1 OR L2)来代替(?????)

我在where中尝试过Contains(),但对我无效,请告诉我如何查询索引

以满足这样的要求。

EN

回答 1

Stack Overflow用户

发布于 2014-07-16 03:58:27

像这样的东西

代码语言:javascript
复制
var licenses = userLicenses.Split(",");

GrossSalesByRevenueClassCollection = session.Query<GrossSalesByRevenueClass, IdxGrossSalesByRevenueClassByDay>()
                    .Where(x => x.Day >= d1 && x.Day <= d2 && x.LicenseId.In(licenses))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24757056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档