LINQ с MongoDB: объединение с несколькими столбцами - PullRequest
0 голосов
/ 24 октября 2019

Присоединение к коллекции Mongodb с использованием драйвера c # и LINQ. Ниже приведен список двух релевантных решений

            var table1 = _myRepo.GetAll();
            var table2 = table1.Where(x => x.Type == "MyType");

            var try1 = (from x in table1
                        join y in table2 on new { a = x.ClaimId, b = x.CensusId } equals
                        new { a = y.ClaimId, b = y.CensusId }
                        select x).ToList();

Этот запрос вызовет исключение Оператор запроса соединения не поддерживается.

            var try2 = (from x in table1
                        from y in table2
                        where x.ClaimId == y.ClaimId &&
                        x.CensusId == y.CensusId select x
                        ).Select(x => x).ToList();

Этот запрос вызовет исключение Оператор запроса SelectMany не поддерживается

Но ниже работает запрос

            var table1 = _arRepository.GetAll();
            var table2 = table1.Where(x => x.Type == "MyType");

            var claimIds = table2.Select(x => x.ClaimId).Distinct().ToList();
            var censusIds = table2.Select(x => x.CensusId).Distinct().ToList();
            var data = table1.Where(x => claimIds.Contains(x.ClaimId) && censusIds.Contains(x.CensusId));

Проблема с этим заключается в том, что он загружает (ApplicIds и censusIds) в память, на самом деле яхотите выполнить это на сервере, чтобы он возвращал только необходимые данные. Я также нашел блог для новой функции mongodb (Lookup), который обсуждался в

Блог: https://www.axonize.com/blog/iot-technology/joining-collections-in-mongodb-using-the-c-driver-and-linq/ Я веду блог для установки необходимых драйверов

<PackageReference Include="mongocsharpdriver" Version="2.9.2" />
<PackageReference Include="MongoDB.Bson" Version="2.9.2" />
<PackageReference Include="MongoDB.Driver" Version="2.9.2" />
<PackageReference Include="MongoDB.Driver.Core" Version="2.9.2" />

, но безуспешно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...