LiteDB查询

时间:2017-05-25 15:39:45

标签: litedb

在各种环境中,用户名不区分大小写。我们将admin等同于ADMIN。我搜索了名为LiteDB的{​​{1}}来比较两个对象,我找不到将字符串作为不区分大小写的点。

CompareTo

中的代码
QueryEquals.cs

命题我们可以不区分大小写

internal override IEnumerable<IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
{
    var node = indexer.Find(index, _value, false, Query.Ascending);

    if (node == null) yield break;

    yield return node;

    if (index.Unique == false)
    {
        // navigate using next[0] do next node - if equals, returns
        while (!node.Next[0].IsEmpty && ((node = indexer.GetNode(node.Next[0])).Key.CompareTo(_value) == 0))
        {
            if (node.IsHeadTail(index)) yield break;

            yield return node;
        }
    }
}

另一个考虑因素是,可以在LiteDB中执行lambda表达式而无需访问者进行转换吗?

1 个答案:

答案 0 :(得分:0)

在LiteDB v4中,您可以使用表达式来确保用户名的索引存储为小写,然后您可以执行“小写比较”

// Create index
entity.EnsureIndex(e => e.Username, "LOWER($.Username)");
...
// Find user
collection.Find(e => e.Username == username.ToLower);

如果你不想使用表达式,我想你可以确保用户名是小写的,然后保存在LiteDB中,或者你可以使用collection.Where(虽然不太确定该方法)可以使用索引减少查询(较慢) )。