问题描述
这是我返回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 返回哪些列的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!