MongoDB – Как фильтровать и обновлять дочерний элемент дочернего элементаC#

Место общения программистов C#
Anonymous
MongoDB – Как фильтровать и обновлять дочерний элемент дочернего элемента

Сообщение Anonymous »

Я использую C# и MongoDB:

Код: Выделить всё

using MongoDB.Driver;
using MongoDB.Driver.Linq;
У меня есть такой объект:

Код: Выделить всё

public class Account
{
public string Name { get; set; }
public string APIKey { get; set; }
public string Secret { get; set; }
public bool Active { get; set; }

public List Stores { get; set; } = new List();

public List Users { get; set; } = new List();
}
Где коллекция магазина выглядит так:

Код: Выделить всё

public class Store
{
public string Name { get; set; }
public string Location { get; set; }
public DateTime LastMessageDate { get; set; }
public List Customers = new List();
}
Я хочу сначала выполнить поиск по учетной записи, затем по магазину, а затем по клиенту внутри объекта магазина.
Я могу выполнить фильтрацию до уровня магазина, выполнив следующие действия:

Код: Выделить всё

var filter = Builders.Filter.Eq(e => e.ID, headers.AccountID)
& Builders.Filter.ElemMatch(e => e.Stores, Builders.Filter.Eq(e => e.ID, headers.StoreID))
Но я не знаю, как фильтровать до уровня клиента.
Я попробовал это:

Код: Выделить всё

var filter = Builders.Filter.Eq(e => e.ID, headers.AccountID)
& Builders.Filter.ElemMatch(e => e.Stores, Builders.Filter.Eq(e => e.ID, headers.StoreID))
& Builders.Filter.ElemMatch(e => e.Stores.FirstOrDefault(c=>c.ID == headers.StoreID).Customers, Builders.Filter.Eq(e => e.UUID, customerUUID));
var update = Builders.Update.Set(e => e.Stores.FirstMatchingElement().Customers, customer);
но это не работает, говоря:

Ошибка CS1660 Невозможно преобразовать лямбда-выражение в тип 'FieldDefinition', поскольку это не тип делегата


Подробнее здесь: https://stackoverflow.com/questions/788 ... of-a-child

Вернуться в «C#»