Có thực sự là chưa được hỗ trợ (Có lẽ nó nên được, nhưng đó là một vấn đề khác hoàn toàn - chúng tôi chỉ thực sự hỗ trợ thêm cho các nhà khai thác khác nhau khi được hỏi nó cho)
Đối với nhiều truy vấn đối với Bất kỳ, tôi giả sử bạn' tái cố gắng để làm dữ liệu động và bạn muốn đạt được cái gì đó như
"X OR Y OR Z"
Đó là một khó khăn, và các nhà cung cấp LINQ theo mặc định sẽ tổng hợp những nhiều mệnh đề WHERE với AND, nên ví dụ của bạn trông giống như
"X AND Y AND Z"
Điều này rõ ràng sẽ không bao giờ xảy ra.
lựa chọn tốt nhất của bạn cho một này là để thả xuống để truy vấn Lucene (ít nhất là cho bây giờ) và làm một cái gì đó như thế này:
var results = s.Advanced.LuceneQuery<Item>()
.Where(string.Format("Tags,:({0})", string.Join(" OR ", tags)));
Make ý nghĩa?
Các truy vấn trên sẽ giống như thế
"Tags,:(X OR Y OR Z)"
Lưu ý: "Thẻ," RavenDB thông báo rằng Thẻ là một mảng
Okay, [sửa]!
Cách dễ nhất để có được những gì bạn thực sự muốn là để làm một cái gì đó dọc theo những dòng
new IndexDefinition<Item, Item>()
{
Map = docs => from doc in docs
select new
{
Tags = doc.Tags
},
Indexes = {{ x => x.Tags, FieldIndexing.Analyzed }}
}.ToIndexDefinition(store.Conventions));
Sau đó, để truy vấn cho ands, bạn có thể làm điều gì đó như thế này:
var results = s.Advanced.LuceneQuery<Item, WhateverYouCalledThatIndex>()
.Where(string.Format("Tags:({0})", string.Join(" AND ", tags)));
Bây giờ, những điều cần lưu ý về
Tags = doc.Tags
Wi sẽ tuần tự hóa toàn bộ mảng đó thành một đốm màu khổng lồ, vì nó chỉ là các chuỗi sẽ hoạt động cho ví dụ này.
Tôi đang tìm cách tốt hơn để thể hiện điều này, không chắc chúng tôi sẽ tìm ra cách làm LINQ-ish, vì nó không thực sự được vẽ trên rất tốt - nhưng nó là là Câu trả lời sẽ làm việc :)
tôi nghĩ tôi khá muốn để có thể ít nhất là làm
Map = docs => from doc in docs
select new
{
Tags = String.Join(" ", doc.Tags)
},
(Điều này sẽ không làm việc vì vậy đừng thử nó), nhưng nó là một chút rõ ràng hơn về những gì bạn muốn đạt được.
Loại trả về 'GetQueryable()' là gì? và bạn đang làm gì trong 'query = query.Where (i => i.Tags.Contains (tag));'? loại truy vấn là gì? –
GetQueryable() trả về một IQueryable- . Tôi có quyền truy cập vào toàn bộ DocumentSession mặc dù, vì vậy đó chỉ là một ví dụ. –
CodingInsomnia