我有一个集合变量,它的元素是dynamic
类型,它是使用Dapper扩展从数据库返回的。
返回的集合是这样的(变量名是reporte
):
[0]: {{DapperRow, centroCosto = '(sin centro de costo)', Almuerzo = '20', Cena = '11', Desayuno = '2', Once = '3', servicios = '36', valorTotal = '106800,00'}}
[1]: {{DapperRow, centroCosto = 'ASESOR', Almuerzo = '18', Cena = '0', Desayuno = '0', Once = '0', servicios = '18', valorTotal = '55800,00'}}
[2]: {{DapperRow, centroCosto = 'AUXILIAR DE ASEO', Almuerzo = '6', Cena = '10', Desayuno = '5', Once = '6', servicios = '27', valorTotal = '70300,00'}}
[3]: {{DapperRow, centroCosto = 'DEMO', Almuerzo = '1437', Cena = '669', Desayuno = '57', Once = '71', servicios = '2234', valorTotal = '6880000,00'}}
[4]: {{DapperRow, centroCosto = 'INFORMÁTICA', Almuerzo = '4', Cena = '0', Desayuno = '0', Once = '0', servicios = '4', valorTotal = '12400,00'}}
[5]: {{DapperRow, centroCosto = 'PRACTICA DEMO', Almuerzo = '20', Cena = '0', Desayuno = '0', Once = '0', servicios = '20', valorTotal = '62000,00'}}
[6]: {{DapperRow, centroCosto = 'PRODEMO', Almuerzo = '81', Cena = '92', Desayuno = '2', Once = '3', servicios = '178', valorTotal = '563200,00'}}
从这个列表中,我告诉你centroCosto
,servicios
和valorTotal
字段是已知的和固定的,所以,我可以使用reporte.OrderBy(r => r.centroCosto)
,reporte.OrderBy(r => r.servicios)
和reporte.OrderBy(r => r.valorTotal)
按这些字段中的任何一个排序。
其他字段是动态的,我事先不知道它们的名字(这就是我使用Dapper的原因)。
如何按这些字段排序?例如,按Almuerzo
字段?
如果您将列表对象转换为字典以获取列名以按顺序排序,然后再转换回列表。您可以对整个列表进行排序,然后您可以将它与dto一起使用,以
方式将列表传递回客户端:例如,您的列表名称是ulist.
,您可以将其写为:
ulist.OrderBy(r => ((IDictionary<string, object>)r)[columnName]);
其中r
为列表中的一个对象,columnName
为该对象对应的实体。