gpt4 book ai didi

c# - 使用 Dapper.NET 修剪字符串

转载 作者:行者123 更新时间:2023-11-30 13:47:46 25 4
gpt4 key购买 nike

我使用 Dapper.NET 已有一段时间了。我只是想知道是否有可能让 Dapper 在将字符串分配给对象的属性时修剪字符串。

我目前在 SQL 中使用 LTRIM(RTRIM(fieldname)),和/或在属性 setter 中使用 value.Trim()

但是,我正在使用一个使用 chars 而不是 varchar 的遗留数据库,我想知道是否有一种方法可以减少我不得不修剪所有内容的时间。

我自己尝试过编辑 dapper 的源代码,但最终破坏了其他映射等,所以放弃了。

只是想知道是否有人有任何建议可以减少这种开销。 (我可能遗漏了一些非常简单的东西!)

顺便说一句,我正在使用 C# 3.5。

最佳答案

我不喜欢直接修改 Dapper 的想法。我决定通过创建一个扩展方法来包装 Dapper 并仅反射(reflect)结果并修剪所有字符串属性来解决这个问题。

public static class DapperExtensions {
public static IEnumerable<T> Query<T>(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null) {
var dapperResult = SqlMapper.Query<T>(cnn, sql, param, transaction, buffered, commandTimeout, commandType);
var result = TrimStrings(dapperResult.ToList());
return result;
}

static IEnumerable<T> TrimStrings<T>(IList<T> objects) {
//todo: create an Attribute that can designate that a property shouldn't be trimmed if we need it
var publicInstanceStringProperties = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.PropertyType == typeof (string) && x.CanRead && x.CanWrite);
foreach (var prop in publicInstanceStringProperties) {
foreach (var obj in objects) {
var value = (string) prop.GetValue(obj);
var trimmedValue = value.SafeTrim();
prop.SetValue(obj, trimmedValue);
}
}
return objects;
}

static string SafeTrim(this string source) {
if (source == null) {
return null;
}
return source.Trim();
}
}

我的解决方案(因为我想使用与 Dapper 相同的名称)的关键是扩展方法解析的工作原理,您可以阅读 here .

关于c# - 使用 Dapper.NET 修剪字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436718/

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