Как найти на основе нулевого свойства, которое содержит определенный список в MongoDB и C #? - PullRequest
1 голос
/ 04 июня 2019

У меня есть Cage объект, который содержит нулевое свойство Guid? PetId Теперь я хочу обновить все клетки, где PetId находится в List<Guid> petIds

Я пытался привести petIds к List<Guid?> или x => x.PetId != null ? PetId : Guid.Empty в In выражении запроса, но не работает.

Это мой метод:

public async Task<bool> MyMethodAsync(IEnumerable<Guid> petIds)
{
   var query = Builders<Cage>.Filter.In(x => x.PetId.Value, petIds);
   var updateQuery = Builders<Cage>.Update.Set(x => x.PetId, null);
   var result = await Collection.UpdateManyAsync(query, updateQuery);
   return result.IsAcknowledged;
}

Все, что я получил, это эта ошибка Unable to determine the serialization information for x => x.PetId.Value

1 Ответ

0 голосов
/ 05 июня 2019

как насчет простого использования Guid.Empty вместо нуля? то есть вы должны хранить PetID как Guid и иметь значение по умолчанию Guid.Empty в объявлении класса.

вот демонстрация:

using System;
using MongoDB.Entities;

namespace StackOverflow
{
    public class Program
    {
        public class Cage : Entity
        {
            public Guid PetID { get; set; } = Guid.Empty;
        }

        static void Main(string[] args)
        {
            new DB("test");

            var cage1 = new Cage { PetID = Guid.NewGuid() };
            cage1.Save();

            var cage2 = new Cage {};
            cage2.Save();

            var list = new[] { cage1.PetID, Guid.NewGuid(), Guid.NewGuid() };

            DB.Update<Cage>()
              .Match(f => f.In(c => c.PetID, list))
              .Modify(c => c.PetID, Guid.Empty)
              .Execute();
        }
    }
}

код выше использует MongoDB.Entities , которая является удобной библиотекой для драйвера c #. [Отказ от ответственности: я автор библиотеки]

...