我正在使用ServiceStack.Ormlite.MySql SqlJoinBuilder
加入来自MySql DB的select
问题是,组成的SQL查询是有效的,但抛出了onConnection.Select<TEntity>(sql)
InvalidCast Exception
。当我使用JoinSqlBuilder
和OrmLite.SqlServer
时,没有这样的错误。
这是我的方法代码:
const int take = 20;
Expression<Func<smt2_browser_data, object>> browserDataSelectFunc =
browserdata => new { browserdata.os_type, browserdata.agent_name };
Expression<Func<smt2_records, object>> recordselectFunc =
record =>
new
{
record.id,
record.client_id,
record.cache_id,
record.domain_id,
record.os_id,
record.browser_id,
record.browser_ver,
record.user_agent,
record.ftu,
record.ip,
record.scr_height,
record.scr_width,
record.vp_height,
record.vp_width,
record.sess_date,
record.sess_time,
record.fps,
record.page_canvas,
record.location_id,
record.country,
browser_version_id = record.browser_data_id
};
var sql = new JoinSqlBuilder<smt2_browser_data, smt2_records>()
.Join<smt2_browser_data, smt2_records>(browserdata => browserdata.id, record => record.browser_data_id, browserDataSelectFunc, recordselectFunc)
.Join<smt2_records, smt2_cache>(record => record.cache_id, cache => cache.id)
.Join<smt2_records, smt2_browsers>(record => record.browser_id, browser => browser.id)
.Join<smt2_records, smt2_os>(record => record.os_id, os => os.id)
.Join<smt2_records, smt2_domains>(record => record.domain_id, domain => domain.id)
.Where<smt2_domains>(domain => domain.domain == domainName)
.Where<smt2_records>(record => record.sess_date >= dateFrom && record.sess_date <= dateTo)
.OrderByDescending<smt2_records>(record => record.sess_date)
.ToSql()
.Limit(1, take);
var records = this.Connection.Select<RecordInfo>(sql);
和阶级
public class RecordInfo
{
public decimal id { get; set; }
public string client_id { get; set; }
public decimal cache_id { get; set; }
public int domain_id { get; set; }
public byte os_id { get; set; }
public string os_type { get; set; }
public byte browser_id { get; set; }
public string agent_name { get; set; }
public float browser_ver { get; set; }
public string user_agent { get; set; }
public bool ftu { get; set; }
public string ip { get; set; }
public int? scr_width { get; set; }
public int scr_height { get; set; }
public int vp_width { get; set; }
public int vp_height { get; set; }
public DateTime sess_date { get; set; }
public float sess_time { get; set; }
public byte fps { get; set; }
public string page_canvas { get; set; }
public int? location_id { get; set; }
public string country { get; set; }
public decimal? browser_version_id { get; set; }
}
谢谢你的建议!
最佳答案
发现问题:
DB类型bigint
在DTO中被转换为decimal
刚刚将decimal
更改为long
关于c# - ServiceStack.Ormlite.MySql SqlJoinBuilder无效的强制转换异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21906717/