在不使用模型的情况下循环 Dapper.Net 个查询结果

Looping through Dapper.Net query results without the use of models

我对 C# 还是个新手,我正在努力寻找解决问题的方法。我的 SQL dapper query returns a table (根据我的理解,如果它是 IEnumerable 与我过去使用的 ADO 和记录集不同,它并不是真正的 table ) 具有三列 col1、col2 和 col3,并且具有多行。我需要为每一行遍历此查询结果并测试值(即,我检查每行的行(0).field1 = 5,行(1).field1 = 5 等的foreach循环)做我需要做。这看起来很基础,但我看到的所有精巧的教程都没有展示这方面的例子,如果他们这样做,他们似乎利用 class 对象而不是直接访问结果(如果可能的话,或者你必须映射结果到模型?)我的代码如下:

                String query = "exec dbo.storeProcedure @jsonData, @mainDocJSON, @supportingDocsJSON";

            IEnumerable queryResult;

            using (var connection = new SqlConnection(connectionString))
            {
                queryResult = connection.Query(query, new { jsonData = jsonData, mainDocJSON = mainDocJSON, supportingDocsJSON = supportingDocsJSON });
            }

我最终还从该代码所在的控制器返回了 IEnumerable 结果,因此我在 JSON 中使用以下方法将其发回给用户。

return Ok(queryResult);

connection.Query return 一个 IEnumerable,为什么我们不创建一个 class 来映射集合? Dapper 是一个微型 ORM,但仍然... ORM。

例如:您的 table return 3 列 ID、名称、创建日期。

// declare a class to map the result first
public class ResultHolderDto
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime CreatedDate { get; set; }
    }

// query somewhere
// This will return IEnumerable<ResultHolderDto>, feel free to play around as normal
var queryResult = await connection.QueryAsync<ResultHolderDto>(query, new { jsonData = jsonData, mainDocJSON = mainDocJSON, supportingDocsJSON = supportingDocsJSON });

foreach(var item in queryResult)
{
    var col1Value = queryResult.Id;
    var col2Value = queryResult.Name;
    var col3Value = queryResult.CreatedDate;
    // Then do something with col1Value, col2Value, col3Value...
}