C# 多栏索引搜索Microsoft.Isam.Esent

C# 多栏索引搜索Microsoft.Isam.Esent,c#,esent,C#,Esent,我面临以下问题:我在数据库index1{binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下设置要使用的索引: Api.JetSetCurrentIndex(_session, _table, index1); 要创建密钥,请执行以下操作: Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey); 然后尝试使用以下选项执行搜索: Api.TrySeek(_session, _table,

我面临以下问题:我在数据库index1{binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下设置要使用的索引:

Api.JetSetCurrentIndex(_session, _table, index1);
要创建密钥,请执行以下操作:

Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);
然后尝试使用以下选项执行搜索:

Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);
如果index1仅用于1列,则该功能将正常工作并返回true。如果我有多个列并尝试搜索单个列的值(例如,对于binaryColumn1={0x01,0x23}),它总是返回false

如何搜索此值?(注:我不能更改索引,也不能创建新索引。)这可能吗


谢谢你

你所做的只适用于
{0x01,0x00}
。您不能通过单个调用来完成,因为第二列的值将混合
SeekEQ
grbit

您可以执行
SeekGE
,但随后需要检索列以确保值实际上是正确的(而不是类似于
{0x22,0x23}
)。您必须执行以下操作:

SetCurrentIndex()
MakeKey(…,二进制值1,MakeKeyGrbit.NewKey | makeygrbit.FullColumnStartLimit);//用0x00追加搜索缓冲区的其余部分。
Seek(通用电气);
MakeKey(…二进制值1,MakeKeyGrbit.NewKey | makeygrbit.FullColumnEndLimit);//用0xff追加搜索缓冲区的其余部分。
Api.JetSetIndexRange();
然后可以使用
Api.TryMoveNext()
迭代该列等于
binaryValue1
的所有行

还要看看项目中包含的测试代码--
HowDoI.cs
文件有很多很好的例子

对不起,伪代码;我现在手头没有源代码

-马丁