2012-01-02 15 views
6

Tôi đang cố gắng sử dụng ToUpperInvariant() trong một truy vấn LINQ với RavenDB. Tôi nhận được một InvalidOperationException:RavenDB LINQ Thao tác không hợp lệ .ToUpperInvariant()

Không thể hiểu làm thế nào để dịch server.Name.ToUpperInvariant().

Truy vấn bên dưới. Điều gì cần phải xảy ra để tôi có thể khớp với tên ở đây? Điều này có thể trong một truy vấn bằng RavenDB không?

public ApplicationServer GetByName(string serverName) 
{ 
    return QuerySingleResultAndCacheEtag(session => session.Query<ApplicationServer>() 
     .Where(server => server.Name.ToUpperInvariant() == serverName.ToUpperInvariant()).FirstOrDefault()) 
     as ApplicationServer; 
} 

protected static EntityBase QuerySingleResultAndCacheEtag(Func<IDocumentSession, EntityBase> func) 
{ 
    if (func == null) { throw new ArgumentNullException("func"); } 

    using (IDocumentSession session = Database.OpenSession()) 
    { 
     EntityBase entity = func.Invoke(session); 
     if (entity == null) { return null; } 
     CacheEtag(entity, session); 
     return entity; 
    } 
} 

Trả lời

8

Như trường hợp ngoại lệ, máy chủ không hiểu ToUpperInvariant(). Theo như tôi biết, RavenDB sử dụng một tùy chỉnh LowerCaseKeywordAnalyzer, do đó, theo truy vấn mặc định phân biệt chữ hoa chữ thường. See the RavenDB documentation on analyzers để biết thêm chi tiết.

+0

Ok, tuyệt, tôi đang cố gắng so sánh bằng cách chuyển sang chữ hoa và điều đó thậm chí không cần thiết. Tôi chỉ thử nó mà không cần chuyển đổi và nó hoạt động. Cảm ơn bạn! –

+0

Cảm ơn bạn! Tôi đã cố gắng làm điều tương tự; không biết gì về điều này. Doh. – Darryl

+0

Đã mong đợi "ngôn ngữ lập trình như" hành vi so sánh quá và chạy vào cùng một vấn đề. Tôi đoán tôi nên có dự kiến ​​"Cơ sở dữ liệu như" so sánh mà thường là bỏ qua trường hợp theo mặc định. Cảm ơn! –