如何使我的通用方法成为使用 C# 选择从 mongoDB 返回哪些列的方法? [英] How do I make my generic method a way to choose which columns to return from mongoDB using C#?

查看:37
本文介绍了如何使我的通用方法成为使用 C# 选择从 mongoDB 返回哪些列的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我返回mongo所有列的方法,我需要修改它以发送参数来选择返回列.

This is my method that returns all columns of the mongo, I need to adapt it to send parameters to choose the return columns.

    public virtual async Task<ListaFiltrada<TEntidade>> GetAllAsync(Paginacao paginacao = null, 
    Expression<Func<TEntidade, bool>> filtro = null, params Ordenacao<TEntidade>[] ordenacao)
    {
        if (!paginacao)
            paginacao = new Paginacao();

        var filtroEmBranco = new BsonDocument();
        var quantidade = await MongoCollection.CountDocumentsAsync(filtroEmBranco);
        var filtroMongo = filtro == null ? filtroEmBranco : Filtro.Where(filtro);
        var cursor = MongoCollection.Find(filtroMongo);

        if (ordenacao != null && ordenacao.Length > 0)
        {
            var ordem = new SortDefinition<TEntidade>[ordenacao.Length];

            for (int i = 0; i < ordenacao.Length; i++)
                if (ordenacao[i].Ascendente)
                    ordem[i] = Ordenacao.Ascending(ordenacao[i].Campo);
                else
                    ordem[i] = Ordenacao.Descending(ordenacao[i].Campo);

            cursor.Sort(Ordenacao.Combine(ordem));
        }

        return new ListaFiltrada<TEntidade>
        {
            Total = quantidade,
            Pagina = paginacao.Pagina,
            TotalFiltrado = await cursor.CountDocumentsAsync(),
            Lista = await cursor.Skip(paginacao.Pular).Limit(paginacao.Quantidade).ToListAsync(),
        };
    }

我想使用一些通用对象作为参数来发送选择我想在列表中返回的列.

I think of using some generic object as a parameter to send choose the columns that I want to return in the list.

如果有人有任何问题或建议,我可以提供更多信息:D

If anyone has any questions or suggestions, I am available for more information :D

推荐答案

好吧,在我的好朋友 Julius 的帮助下,我能够以一种非常安静的方式完成这项工作.关注,我附上决议

Well guys, with the help of a good friend of mine Julius, I was able to do this in a very quiet way. Follow and, I attach the resolution

    public virtual async Task<ListaFiltrada<TEntidade>> GetAllAnyColumnAsync(Paginacao paginacao = null, Expression<Func<TEntidade, bool>> filtro = null,
        Expression<Func<TEntidade, TEntidade>> projectionExpression = null, params Ordenacao<TEntidade>[] ordenacao)
    {
        if (!paginacao)
            paginacao = new Paginacao();

        var filtroEmBranco = new BsonDocument();
        var quantidade = await MongoCollection.CountDocumentsAsync(filtroEmBranco);
        var filtroMongo = filtro == null ? filtroEmBranco : Filtro.Where(filtro);
        var cursor = projectionExpression == null ? MongoCollection.Find(filtroMongo) : MongoCollection.Find(filtroMongo).Project(projectionExpression);

        if (ordenacao != null && ordenacao.Length > 0)
        {
            var ordem = new SortDefinition<TEntidade>[ordenacao.Length];

            for (int i = 0; i < ordenacao.Length; i++)
                if (ordenacao[i].Ascendente)
                    ordem[i] = Ordenacao.Ascending(ordenacao[i].Campo);
                else
                    ordem[i] = Ordenacao.Descending(ordenacao[i].Campo);

            cursor.Sort(Ordenacao.Combine(ordem));
        }

        if (ordenacao != null && ordenacao.Length > 0)
        {
            var ordem = new SortDefinition<TEntidade>[ordenacao.Length];

            for (int i = 0; i < ordenacao.Length; i++)
                if (ordenacao[i].Ascendente)
                    ordem[i] = Ordenacao.Ascending(ordenacao[i].Campo);
                else
                    ordem[i] = Ordenacao.Descending(ordenacao[i].Campo);

            cursor.Sort(Ordenacao.Combine(ordem));
        }

        return new ListaFiltrada<TEntidade>
        {
            Total = quantidade,
            Pagina = paginacao.Pagina,
            TotalFiltrado = await cursor.CountDocumentsAsync(),
            Lista = await cursor.Skip(paginacao.Pular).Limit(paginacao.Quantidade).ToListAsync(),
        };
    }

我留下了一个超级拯救我的兄弟朱利斯,他在这个帮助下拯救了我.我希望这段代码有一天能对某人有所帮助.

I leave here a super save for my brother Julis who saved me with this help. I hope this code helps somebody someday.

#和平

这篇关于如何使我的通用方法成为使用 C# 选择从 mongoDB 返回哪些列的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆