关于Id结构属性的RavenDB查询

时间:2015-02-11 23:12:08

标签: linq ravendb

我正在尝试根据自定义ID结构的一个属性在RavenDb中查找文档:

struct UserId { 
    public int CompanyCode { get; set; }
    public int EmployeeCode { get; set; }
}

class User {
    public UserId Id { get; set; }
    public string SomeData { get; set; }
}

class UserIdConverter : ITypeConverter { 
    public bool CanConvertFrom(Type t) { return t == typeof(UserId); }
    public string ConvertFrom(string tag, object value, bool allowNull) { ... }
    public object ConvertTo(string value) { ... }
}

此查询始终没有结果:

public User[] GetUsersByCompanyCode(int companyCode) 
{
    var users = (from u in _session.Query<User>()
                 where u.Id.CompanyCode == companyCode
                 select u).ToArray();
    return users;
}

但是,此版本会返回正确的结果:

public User[] GetUsersByCompanyCode(int companyCode) 
{
    var users = (from u in _session.Query<User>().ToArray()
                 where u.Id.CompanyCode == companyCode
                 select u).ToArray();
    return users;
}

在不加载所有文档的情况下实现此目的的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

默认情况下,RavenDB使用Id属性作为文档的标识,并且不支持复杂类型(据我所知)。我建议阅读Working with document identifiers

通常,您可以在Conventions.FindIdentityProperty中更改标识属性的名称,但我建议更改UserId属性的名称,并使用{{1}类型的其他属性Id 1}}:

string