如何使用 SqlKata (Dapper) 从多个列中获取值作为 IEnumerable
How to get values from multiple columns as IEnumerable using SqlKata (Dapper)
我正在使用 SQL,我的数据库中有一个 table,如下所示。
Id Remark1 Remark2 Remark3 Remark4
------------------------------------------------
1 AAA BBB CCC DDD
2 EEE FFF GGG HHH
如何使用以下 DTO 从 Remark*
列获取所有值作为 IEnumerable<string>
?
class MyDTO
{
public int ID { get; }
public IEnumerable<string> Remarks { get; }
}
注意:我使用的是 SqlKata (Dapper),您也可以在回答时使用它。
如果您使用的是 Dapper,也许只需使用 non-generic 查询 API。这 returns 每行作为 dynamic
,但这也可以转换为 IDictionary<string,object>
,这允许您访问每个命名列(例如,通过 foreach
)。
foreach (IDictionary<string, object> row in conn.Query(sql, args))
{
var obj = new MyDto();
var vals = new List<string>();
obj.Remarks = list;
foreach ((var key, var value) in row)
{
if (key == nameof(obj.Id))
obj.Id = (int)value;
else
vals.Add((string)value);
}
// do something with obj
}
```
另一种选择是创建一个丑陋但有效的 UNION ALL 查询:
SELECT Id, Remark1 as Remark FROM Table
UNION ALL
SELECT Id, Remark2 as Remark FROM Table
UNION ALL
SELECT Id, Remark... as Remark FROM Table
这可以使用 SqlKata 在 for..loop 中完成,在循环中调用 Union
https://sqlkata.com/docs/combine#union-except-intersect
Non-Tested 代码示例:
var q = new Query("Table").Select("Id", "Remark1 as Remark");
for(int r=2;r<=50;i++)
{
var u = new Query("Table").Select("Id", $"Remark{r} as Remark");
q = q.Union(u);
}
我正在使用 SQL,我的数据库中有一个 table,如下所示。
Id Remark1 Remark2 Remark3 Remark4
------------------------------------------------
1 AAA BBB CCC DDD
2 EEE FFF GGG HHH
如何使用以下 DTO 从 Remark*
列获取所有值作为 IEnumerable<string>
?
class MyDTO
{
public int ID { get; }
public IEnumerable<string> Remarks { get; }
}
注意:我使用的是 SqlKata (Dapper),您也可以在回答时使用它。
如果您使用的是 Dapper,也许只需使用 non-generic 查询 API。这 returns 每行作为 dynamic
,但这也可以转换为 IDictionary<string,object>
,这允许您访问每个命名列(例如,通过 foreach
)。
foreach (IDictionary<string, object> row in conn.Query(sql, args))
{
var obj = new MyDto();
var vals = new List<string>();
obj.Remarks = list;
foreach ((var key, var value) in row)
{
if (key == nameof(obj.Id))
obj.Id = (int)value;
else
vals.Add((string)value);
}
// do something with obj
}
```
另一种选择是创建一个丑陋但有效的 UNION ALL 查询:
SELECT Id, Remark1 as Remark FROM Table
UNION ALL
SELECT Id, Remark2 as Remark FROM Table
UNION ALL
SELECT Id, Remark... as Remark FROM Table
这可以使用 SqlKata 在 for..loop 中完成,在循环中调用 Union
https://sqlkata.com/docs/combine#union-except-intersect
Non-Tested 代码示例:
var q = new Query("Table").Select("Id", "Remark1 as Remark");
for(int r=2;r<=50;i++)
{
var u = new Query("Table").Select("Id", $"Remark{r} as Remark");
q = q.Union(u);
}