且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

是否ORMLite支持C#动态类型?

更新时间:2023-02-11 13:36:44

在设计OrmLite不支持编组动态类型,并预计结果集映射到类型化POCO的。

By design OrmLite does not support marshalling to dynamic types, and expects resultsets to mapped to Typed POCO's.

虽然它确实有专门的API访问的动态结果集 列表<对象>

Although it does have specialized API's to access Dynamic Result Sets using List<object>:

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

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

或使用词典&LT;字符串对象> ,例如:

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集合:

As well as being able to map into loose-typed .NET collections:

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")



使用精致小巧的查询



OrmLite确实有短小精悍嵌入式版本一> 支持动态效果的:

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);
}