鉴于这些要求,我如何构建本文档的RavenDb where条款?
此问题基于以下问题 索引: 带分页的简单Where子句: 问题的实质是如何动态添加或删除字段以参与where子句 文件:鉴于这些要求,我如何构建本文档的RavenDb where条款?,ravendb,Ravendb,此问题基于以下问题 索引: 带分页的简单Where子句: 问题的实质是如何动态添加或删除字段以参与where子句 文件: [Serializable] public class Product { public string AveWeight { get; set; } public string BrandName { get; set; } public string CasePack { get; set; } public string Catal
[Serializable]
public class Product
{
public string AveWeight { get; set; }
public string BrandName { get; set; }
public string CasePack { get; set; }
public string Catalog { get; set; }
public decimal CatalogId { get; set; }
public decimal CategoryId { get; set; }
public string Info { get; set; }
public bool IsOfflineSupplierItem { get; set; }
public bool IsRebateItem { get; set; }
public bool IsSpecialOrderItem { get; set; }
public bool IsSpecialPriceItem { get; set; }
public bool IsTieredPricingItem { get; set; }
public string ItemNum { get; set; }
public string ManufactureName { get; set; }
public string ManufactureNum { get; set; }
public decimal OffineSupplierId { get; set; }
public string PackageRemarks { get; set; }
public decimal Price { get; set; }
public decimal PriceGroupId { get; set; }
public decimal ProductId { get; set; }
public string ProductName { get; set; }
public int Quantity { get; set; }
public string SupplierName { get; set; }
public string UOM { get; set; }
public string Upc { get; set; }
public string Url { get; set; }
}
索引:
if (store.DatabaseCommands.GetIndex("Products_Index") == null)
{
store.DatabaseCommands.PutIndex("Products_Index", new IndexDefinitionBuilder<Product>
{
Map = products => from p in products
select new { p.CatalogId,
p.HasPicture,
p.INFO2,
p.IsOfflineSupplierItem,
p.IsRebateItem,
p.IsSpecialOrderItem,
p.IsSpecialPriceItem,
p.IsTieredPricingItem,
p.Price },
Indexes =
{
{ x => x.INFO2, FieldIndexing.Analyzed },
{ x => x.CatalogId, FieldIndexing.Default},
{ x => x.HasPicture, FieldIndexing.Default},
{ x => x.IsOfflineSupplierItem, FieldIndexing.Default},
{ x => x.IsRebateItem, FieldIndexing.Default},
{ x => x.IsSpecialOrderItem, FieldIndexing.Default},
{ x => x.IsSpecialPriceItem, FieldIndexing.Default},
{ x => x.IsTieredPricingItem, FieldIndexing.Default},
{ x => x.Price, FieldIndexing.Default}
}
});
}
if(store.DatabaseCommands.GetIndex(“产品索引”)==null)
{
store.DatabaseCommands.PutIndex(“Products_Index”,新的IndexDefinitionBuilder
{
Map=products=>来自products中的p
选择新的{p.CatalogId,
p、 哈斯皮克,
p、 资讯2,
p、 IsofrinesSupplierItem,
p、 以色列,
p、 IsSpecialOrderItem,
p、 是特价商品,
p、 IsTieredPricingItem,
p、 价格},
索引=
{
{x=>x.INFO2,FieldIndexing.Analyzed},
{x=>x.CatalogId,fieldindex.Default},
{x=>x.HasPicture,FieldIndexing.Default},
{x=>x.IsoflineSupplierItem,FieldIndexing.Default},
{x=>x.IsRebateItem,FieldIndexing.Default},
{x=>x.IsSpecialOrderItem,FieldIndexing.Default},
{x=>x.IsSpecialPriceItem,FieldIndexing.Default},
{x=>x.istiredPricingItem,FieldIndexing.Default},
{x=>x.Price,FieldIndexing.Default}
}
});
}
朴素Where子句
string t1 = "foo";
bool t2 = true;
decimal t3 = 100m;
products = DocumentSession.Query<Product>()
.Statistics(out stats)
.Where(p => p.INFO2.StartsWith(t1) && p.IsRebateItem == t2 && p.CatalogId = t3)
.OrderByField(columnToSortBy, columnToSortByAsc)
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList()
;
string t1=“foo”;
布尔t2=真;
十进制t3=100m;
products=DocumentSession.Query()
.统计数据(统计数据)
.Where(p=>p.INFO2.StartsWith(t1)和&p.isrebatietem==t2和&p.CatalogId=t3)
.OrderByField(columnToSortBy、columnToSortByAsc)
.Skip(页面索引*页面大小)
.Take(页面大小)
托利斯先生()
;
高级查询第一关
var products = s.Advanced.LuceneQuery<Product>("Products")
.WhereEquals("Catalog", "National Catalog")
.ToList()
;
var products=s.Advanced.LuceneQuery(“产品”)
.WhereEquals(“目录”、“国家目录”)
托利斯先生()
;
这会引发异常
Lucene.Net.dll中出现类型为“Lucene.Net.QueryParsers.QueryParser.LookaheadSuccess”的第一次意外异常
Lucene.Net.dll中发生了类型为“System.IO.IOException”的第一次意外异常
第二关(工程)
result=s.Advanced.LuceneQuery(“产品索引”)
其中(“CatalogId:(736275001)和HasPicture:(true)以及IsoflineSupplierItem:(false)”)
.ToArray();
第三关(也是最快的)
result=s.Advanced.LuceneQuery(“产品/索引”)
.统计数据(统计数据)
.WhereStartsWith(“信息2”、“墨水”)
.AndAlso()
.WhereStartsWith(“信息2”、“笔”)
.AndAlso()
.WhereEquals(“CatalogId”,736275001)
.AndAlso()
.WhereEquals(“HasPicture”,真)
.AndAlso()
.WhereEquals(“IsoflineSupplierItem”,false)
.AndAlso()
.WhereEquals(“IsRebateItem”,false)
.AndAlso()
.WhereEquals(“IsSpecialOrderItem”,false)
.AndAlso()
.WhereEquals(“IsSpecialPriceItem”,false)
.ToArray()
;
如果要动态执行此操作,可以使用DocumentSession.Advanced.LuceneQuery,它允许您传递字符串作为索引的属性名。
这样,您就不必处理强类型问题。如果GetIndex==null,则不要这样做,然后PutIndex-它不会处理索引更改。看见
result = s.Advanced.LuceneQuery<Product>("Products_Index")
.Where("CatalogId:(736275001) AND HasPicture:(true) AND IsOfflineSupplierItem:(false)")
.ToArray();
result = s.Advanced.LuceneQuery<Product>("Products/Index")
.Statistics(out stats)
.WhereStartsWith("INFO2", "ink")
.AndAlso()
.WhereStartsWith("INFO2", "pen")
.AndAlso()
.WhereEquals("CatalogId", 736275001)
.AndAlso()
.WhereEquals("HasPicture", true)
.AndAlso()
.WhereEquals("IsOfflineSupplierItem", false)
.AndAlso()
.WhereEquals("IsRebateItem", false)
.AndAlso()
.WhereEquals("IsSpecialOrderItem", false)
.AndAlso()
.WhereEquals("IsSpecialPriceItem", false)
.ToArray()
;