gpt4 book ai didi

c# - ORMLite 支持 C# 的动态类型吗?

转载 作者:行者123 更新时间:2023-12-02 00:09:02 26 4
gpt4 key购买 nike

我正在从 ServiceStack 中研究 ORMLite,我在这里想做的是调用一个存储过程,该过程又返回许多行,这些行肯定不会绑定(bind)到任何域对象,但也可能有也可能没有 dto要映射的对象。我想知道是否可以将它绑定(bind)到一种类型。不过,听起来 ORMLite 目前还不支持动态类型绑定(bind)。 ORMLite 目前支持吗?

最佳答案

按照设计,OrmLite 不支持编码到动态类型,并期望结果集映射到类型化 POCO。

尽管它确实有专门的 API 来访问 Dynamic Result Sets使用 C# 7 元组:

var query = db.From<Employee>()
.Join<Department>()
.OrderBy(e => e.Id)
.Select<Employee, Department>(
(e, d) => new { e.Id, e.LastName, d.Name });

var results = db.Select<(int id, string lastName, string deptName)>(query);

var row = results[i];
$"row: ${row.id}, ${row.lastName}, ${row.deptName}".Print();

或者List<object> :

db.Select<List<object>>(db.From<Poco>()
.Select("COUNT(*), MIN(Id), MAX(Id)"))[0].PrintDump();

/* Output */
[
10,
1,
10
]

或者使用Dictionary<string,object> ,例如:

db.Select<Dictionary<string,object>>(db.From<Poco>()
.Select("COUNT(*) Total, MIN(Id) MinId, MAX(Id) MaxId"))[0].PrintDump();

/* Output */
{
Total: 10,
MinId: 1,
MaxId: 10
}

以及能够映射到松散类型的 .NET 集合:

Dictionary<int, string> trackIdNamesMap = db.Dictionary<int, string>(
"select Id, Name from Track")

Dictionary<int, List<string>> albumTrackNames = db.Lookup<int, string>(
"select AlbumId, Name from Track")

List<string> trackNames = db.Column<string>("select Name from Track")

HashSet<string> uniqueTrackNames = db.ColumnDistinct<string>("select Name from Track")

使用 Dapper 的查询

OrmLite 确实有 Dapper 的嵌入版本其中does support dynamic results :

using ServiceStack.OrmLite.Dapper;

using (var db = new SqlConnection(@"Data Source=... etc."))
{
db.Open();

var p = new DynamicParameters();
p.Add("@params", "Id=21");

IEnumerable<dynamic> dynamicResults = db.Query(sql:"GetPivotData", param: p,
commandType:CommandType.StoredProcedure);
}

关于c# - ORMLite 支持 C# 的动态类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com