2012-10-09 32 views
6

Với bản cập nhật gần đây cho 10gen c# driver for mongodb Tôi muốn cập nhật mã của mình để mã sử dụng phiên bản được nhập mạnh mẽ.cách cập nhật các mục trong một mảng/danh sách với trình điều khiển mongo C#?

gọi trước đây của tôi là:

var update2 = new UpdateBuilder(); 
var index = album.Ratings.IndexOf(rating); 
update2.Set("Ratings." + index + ".Number", number); 
update2.Set("Rating", album.Rating); 
_session.Db().GetCollection<Album>("Album") 
    .Update(Query<Album>.Where(x => x.Id == objId), update2); //this line is working 

Cuộc gọi mới sẽ là:

update.Set(x => x.Ratings[index].Number, number); 
//update2.Set("Ratings." + index + ".Number", number); previous call 

Nhưng tôi nhận được ngoại lệ này:

Không thể xác định thông tin serialization cho sự biểu hiện : (Album x) => x.Ratings.get_Item (WebApp.Areas.API.Controll ers.RatingController + <> c__DisplayClass5.index) .Number.

Có cách nào để tôi có thể cập nhật một mục trong Danh sách không?

Trả lời

8

Sự cố thú vị. Điều này hoạt động khi sử dụng một hằng số như sau:

var update = Update<Album>.Set(x => x.Ratings[0].Number, 10); 

Tuy nhiên, điều này dường như bị phá vỡ khi bạn sử dụng biến, như bạn đã làm với chỉ mục. Điều này chắc chắn là một lỗi. Tôi đã tạo ra một vấn đề Jira cho nó ở đây: https://jira.mongodb.org/browse/CSHARP-598.

Điều này rất có thể là do chúng tôi không đánh giá một phần biểu thức trước khi xử lý.

+0

Cảm ơn Craig, điều gì đó cũng sẽ thực sự thú vị là khi gọi _session.Db(). GetCollection ("Quảng cáo") nếu chúng ta không phải viết "Quảng cáo" và nó sẽ theo mặc định tên của lớp nên chúng tôi sẽ không có chuỗi ma thuật trong ứng dụng! Đó là một số công việc rất tốt đẹp đã được thực hiện trong mongo-LINQ! – VinnyG

+1

Đó là một cuộc tranh luận đang diễn ra. https://jira.mongodb.org/browse/CSHARP-126. Bây giờ, hầu hết mọi người viết một phương pháp mở rộng sử dụng typeof (T) .Name cho tên bộ sưu tập. –

+0

Cố định kể từ 1.6.1 – VinnyG

Các vấn đề liên quan