我正在尝试写一个"简单"的 Generic Get<T>; 延期
System.Runtime.MemoryCache.
为什么"简单"?因为我通常在缓存之前知道对象的真实类型,所以当我从缓存中检索它时,我不会以不可预测的方式转换它.
例如:如果布尔"true"值存储在cacheKey"id"的缓存中,那么
Get<string>("id") == "true";
Get<int>("id") == 1; // any result > 0 is okay
Get<SomeUnpredictableType> == null; // just ignore these trouble conversions
Run Code Online (Sandbox Code Playgroud)
这是我不完整的实现:
public static T DoGet<T>(this MemoryCache cache, string key) {
object value = cache.Get(key);
if (value == null) {
return default(T);
}
if (value is T) {
return (T)value;
}
// TODO: (I'm not sure if following logic is okay or not)
// 1. if T and value …Run Code Online (Sandbox Code Playgroud) Dapper提供了许多将数据映射到动态对象列表的方法.但是在某些情况下我想将数据读入Dictionary列表.
SQL可能看起来像:
"SELECT * FROM tb_User"
Run Code Online (Sandbox Code Playgroud)
由于tb_User可能会在外部更改,因此我不知道哪些列将返回结果.所以我可以写一些像这样的代码:
var listOfDict = conn.QueryAsDictionary(sql);
foreach (var dict in listOfDict) {
if (dict.Contains("anyColumn")) {
// do right thing...
}
}
Run Code Online (Sandbox Code Playgroud)
Dapper有没有内置的方法来进行这种转换?
我写了两段SQL命令,想要在一个查询中处理如下:
SELECT COUNT(*) FROM books
SELECT * FROM books ORDER BY bookID OFFSET 1000 ROWS FETCH NEXT 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
如何使用conn.QueryMultiple方法同时获取countAND list of books?
顺便说一句:我不想创建任何额外的实体类
=====更新时间2016年8月20日=====
最新版本的fastjson现在可以
Dictionary<string, ?>正确处理类型,我的问题现在解决了.=============================
我正在使用fastjson来序列化来自Dapper的查询结果,DB中的表具有如下数据:
id | name | price
1 | x | 100
2 | y | 200
....
Run Code Online (Sandbox Code Playgroud)
当我
using Dapper;
using fastJSON;
// ....
JSON.Parameters.KVStyleStringDictionary = false;
// ....
result = JSON.toJSON(conn.Query("SELECT * FROM tableX"));
Run Code Online (Sandbox Code Playgroud)
我希望结果如下:
[{"id":1,"name":"x","price":100},{"id":2,"name":"y","price":200},...]
Run Code Online (Sandbox Code Playgroud)
但实际结果输出:
[[{"Key":"id","Value":1},{"Key":"name","Value":"x"},{"Key":"price","Value":100}],
[{"Key":"id","Value":2},{"Key":"name","Value":"y"},{"Key":"price","Value":200}]...]
Run Code Online (Sandbox Code Playgroud)
生成了许多看起来多余的键值对.
有没有办法得到正确的结果?
或者我应该切换到另一个JSON序列化程序?
==========更新==========
makubex88的答案表明我可以创建一个映射表的自定义类,并使用它conn.Query<myClass>来获取正确的json,虽然它适用于这种情况,看起来我必须为DB中的每个表创建数百个类才能获得理想的json结果,对我来说确实很累人.(谢谢你:P)
任何替代解决方案将受到高度赞赏!
我有这样的表结构:
表tbUser
--ID(int)
--Name(varchar)
- 生日(日期时间)
- 速度(双倍)
什么时候
"SELECT * FROM tbUser"
Run Code Online (Sandbox Code Playgroud)
我希望查询结果中的每一行看起来像(将每一列变成字符串格式):
row["ID"] = "1";
row["Name"] "John"
row["Birthday"] = "1980-01-01"
row["rating"] = "3.4"
Run Code Online (Sandbox Code Playgroud)
我需要字符串作为结果的原因是它们易于操作/格式化/显示并且有些时候更安全(如果另一位工程师在DB中更改了列类型 - "评级"列更改double为int,则程序不太可能抛出异常,因为它只关心字符串)
我知道有一种方法可以将DapperRow转换IDictionary<string, object>为非常接近的IDictionary<string, string>;
var result = conn.Query("SELECT * FROM tbUser");
foreach (IDictionary<string, object> row in result) {
// I have to write my own object->string conversion in every loop
}
Run Code Online (Sandbox Code Playgroud)
任何建议都非常感谢!
Bootstrap col-xx 类中定义的内容padding有时会在小屏幕上浪费空间,因此我想通过将 col-xx 与某些 css 设置嵌套来删除填充,如下所示:
<style>
div[class^=col-] > div[class^=col-] {
padding-left: 0px;
padding-right: 0px;
}
</style>
<div class="row">
<div class="col-xs-12">
<div class="col-xs-4">a</div>
<div class="col-xs-4">b</div>
<div class="col-xs-4">c</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的实现看起来还好吗?直接嵌套 col-xx 是否存在潜在的样式问题?
我有一个充满数据的 DataTable 对象,并想将其保存到 SQL-DB (我不想运行 foreach 循环来执行插入),我的代码如下:
var dt = new DataTable();
//
// ... data loading to table dt
//
string sql = @"
INSERT INTO TB_Book (
BookID,
BookName
) SELECT
BookID,
BookName
FROM
@DataTable";
conn.execute(sql, new { DataTable = dt.AsTableValuedParameter("DataTable") });
Run Code Online (Sandbox Code Playgroud)
执行时,会抛出以下异常:
列、参数或变量@DataTable。: 找不到数据类型DataTable
我如何改进我的代码以使其发挥作用?
c# ×5
dapper ×5
.net ×4
dictionary ×2
sql ×2
caching ×1
css ×1
fastjson ×1
generics ×1
json ×1
memorycache ×1
sql-server ×1
string ×1