C# MongoDB объединяет коллекции и включает фильтры - PullRequest
0 голосов
/ 27 января 2020

начал использовать MongoDB в моем базовом приложении. net с использованием MongoDB.Driver. Мне нужно было найти способ присоединиться к коллекциям и включить фильтры.

Обнаружение того, как присоединиться, это то, что я нашел -

            var query = from c in collection1.AsQueryable()
                        join m in collection2.AsQueryable() on
                 c.ClassTwoId equals m.Id into j
                        select new { c, j };

Поиск того, что я нашел, - это фильтрация.

            //filters
            FilterDefinitionBuilder<PortalUser> builder = Builders<PortalUser>.Filter;
            List<FilterDefinition<PortalUser>> filters = new List<FilterDefinition<PortalUser>>();
            filters.Add(builder.Eq(PortalUser => PortalUser.IsActive, true));

            var result = portalUserCollection.FindAsync<PortalUser>(builder.And(filters));

Не удалось найти способ объединить приведенные выше примеры ... Единственный способ, который я нашел, чтобы отфильтровать IQueryable, - добавить оператор where внутри IQueryable, но так как фильтры являются динамическими c и решил время выполнения, что означает, что мне придется делать много операций if / else и перестраивать IQueryable каждый раз, когда звучит глупо ...

Кто-нибудь знает, как обойти это?

Спасибо много.

1 Ответ

0 голосов
/ 30 января 2020

Использование условия Where.

var query = from c in collection1.AsQueryable().Where(x => x.Name == "Test")
            join m in collection2.AsQueryable() on
            c.ClassTwoId equals m.Id into j
            select new { c, j };

Создание динамического c путем добавления пакета nuget System.Linq.Dynami c

using System.Linq.Dynamic;
....
var query = from c in collection1.AsQueryable().Where("Age == 123")
            join m in collection2.AsQueryable() on 
            c.ClassTwoId  equals m.Id into j
            select new { c, j };

Для получения дополнительной информации о Dynami c запросов см. Документацию по System.Linq.Dynami c (параметры et c.)

...