【发布时间】:2015-05-27 18:14:03
【问题描述】:
我正在尝试索引应按如下方式排序的字母数字属性:
WS1-1-14-1
WS1-1-15-1
WS1-1-15-2
WS1-1-15-3
我创建了一个删除属性的非数字字符的索引,并将 SortOptions 设置为 Int,这样我就可以像上面那样排序了。
这是我的索引定义:
Map = fixtures => from f in fixtures
select new
{
FixtureNumber = f.FixtureNumber.Replace("-", "").Replace("WS", ""),
};
Sort(x => x.FixtureNumber, SortOptions.Int);
当我在索引上排序时排序工作正常:
session.Query<Fixture, Fixtures_All>.OrderBy(x => x.FixtureNumber).ToList()
但我的问题是,当我对我的 Fixture 文档进行动态查询时,它就像查询仍在使用我的索引:
session.Query<Fixture>.FirstOrDefault(x => x.FixtureNumber == "WS1-1-1");
不返回任何结果,我希望它会因为我没有查询我的索引。但以下确实有效,我觉得很奇怪:
var fixNo = "WS1-15-1".Replace("-", "").Replace("WS", "");
session.Query<Fixture>.FirstOrDefault(x => x.FixtureNumber == fixNo);
为什么我的索引会影响这个动态索引查询?
还有没有更好的方法来索引我的属性而无需使用字符串替换来使其成为整数?
谢谢
注意:
如果我只是在 SortOptions 上使用默认字符串比较器,结果会像这样排序:
WS1-1-15-1
WS1-1-15-10
WS1-1-15-2
WS1-1-15-3
...
【问题讨论】: