Obtener datos de consultas múltiples sin usar foreach

.net dapper sql

Pregunta

Estoy utilizando el siguiente código para consultar el recuento de la tabla en la lista de la tabla.

List<string> tablelist = //some value
foreach( string table in tablelist)
{
var rowcount = string.Format("select count(*) from " + view + " WITH (NOLOCK)");
int countresult = con.Query<int>(rowcount).FirstOrDefault();
if(countresult >0)
{ //someoperation }
}

Aquí la llamada a DB se realiza siempre. ¿Existe alguna opción donde pueda llamar a DB solo una vez y obtener el resultado de todas las declaraciones de selección en una sola variable? Por favor, ayuda soy nuevo en dapper.net. Cómo puedo conseguir esto

Respuesta popular

El código de expansión de parámetros de Dapper no maneja las consultas IN con Lists; sin embargo, el sistema de predicados de DapperExtensions permite las consultas IN y convertirá un predicado de consulta igual a una consulta IN si el parámetro es un tipo de lista.

Si desea seguir con Dapper para el mapeo, puede extender la consulta sysobjects / sysindexes de Jonathan Willcock como una vista y crear una clase para representar los resultados. A continuación, podría ensamblar una consulta DapperExtensions GetList con los parámetros apropiados

Ver creación:

CREATE VIEW TableRowCounts
AS
SELECT t.name TableName, i.rows Records 
FROM sysobjects t INNER JOIN sysindexes i ON i.ID = t.ID where t.xtype = 'U' and i.indid in (0,1)

Clase para resultados:

public class TableRowCounts
{
    public string TableName { get; set; }
    public int Records { get; set; }
}

Consulta de DapperExtensions para hidratar los resultados:

PredicateGroup query = new PredicateGroup();
List<string> tables;

tables = new List<string> { "table1", "table2" };
query.Predicates = new List<IPredicate>();
query.Predicates.Add(Predicates.Field<TableRowCounts>(f => f.TableName, Operator.Eq, tables));

List<TableRowCounts> results;
results = _connection.GetList<TableRowCounts>(query).ToList();

Como nota al margen con respecto al rendimiento IN, es posible que vea un descenso en el rendimiento si su lista de parámetros (nombres de tabla en este caso) es mayor que alrededor de 200 entradas.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué