使用 linq2db 执行原始 SQL 字符串
Executing raw SQL string using linq2db
我可以使用 linq2db (https://github.com/linq2db/linq2db) 执行原始 SQL 字符串并获得 dynamic
的结果吗?
我正在寻找类似 ADO.NET 的 DBCommand.ExecuteReader
或 Dapper 的 Query<dynamic>
。
linq2db 是强类型的,但您可以执行原始 sql 并将结果映射到匿名 class。例如:
var result = ExecuteAnonymous(db,
"select id, name from sysobjects",
new { id = 0, name = "" });
其中 ExecuteAnonumous 是辅助方法:
IQueryable<T> ExecuteAnonymous(DataConnection db, string sql, T typeObject)
{
return db.Query<T>(sql);
}
你可以很容易地自己实现它:
foreach (var rec in DataConnection.Query<dynamic>(reader =>
{
IDictionary<string, object> eo = new ExpandoObject();
for (var index = 0; index < reader.FieldCount; index++)
{
eo.Add(reader.GetName(index), reader.GetValue(index));
}
return eo;
}, "select first 2 \"Guid\", \"DongleID\" from \"Sellings\""))
{
Console.WriteLine(rec.DongleID);
}
首先,您需要创建一个class,它具有与您的查询结果一样多的属性。
第二个重要的事情是,您需要向此 class 的每个 属性 添加属性,以匹配执行此 "select" 后产生的列的名称。例如:[Column(@"user_firstname")]
.
之后,您可以将此 class 放入查询的调用中。我可以演示一下:
using (var db = new TestDB())
{
var usersList = db.Query<YourCustomClass>("your select query here").ToList();
}
现在您的列表中将包含类型为 "YourCustomClass" 的所有数据。
希望这就是您要找的答案。
我可以使用 linq2db (https://github.com/linq2db/linq2db) 执行原始 SQL 字符串并获得 dynamic
的结果吗?
我正在寻找类似 ADO.NET 的 DBCommand.ExecuteReader
或 Dapper 的 Query<dynamic>
。
linq2db 是强类型的,但您可以执行原始 sql 并将结果映射到匿名 class。例如:
var result = ExecuteAnonymous(db,
"select id, name from sysobjects",
new { id = 0, name = "" });
其中 ExecuteAnonumous 是辅助方法:
IQueryable<T> ExecuteAnonymous(DataConnection db, string sql, T typeObject)
{
return db.Query<T>(sql);
}
你可以很容易地自己实现它:
foreach (var rec in DataConnection.Query<dynamic>(reader =>
{
IDictionary<string, object> eo = new ExpandoObject();
for (var index = 0; index < reader.FieldCount; index++)
{
eo.Add(reader.GetName(index), reader.GetValue(index));
}
return eo;
}, "select first 2 \"Guid\", \"DongleID\" from \"Sellings\""))
{
Console.WriteLine(rec.DongleID);
}
首先,您需要创建一个class,它具有与您的查询结果一样多的属性。
第二个重要的事情是,您需要向此 class 的每个 属性 添加属性,以匹配执行此 "select" 后产生的列的名称。例如:[Column(@"user_firstname")]
.
之后,您可以将此 class 放入查询的调用中。我可以演示一下:
using (var db = new TestDB())
{
var usersList = db.Query<YourCustomClass>("your select query here").ToList();
}
现在您的列表中将包含类型为 "YourCustomClass" 的所有数据。
希望这就是您要找的答案。