2014-02-20 3 views
2

Я использую ServiceStack.Ormlite.MySql SqlJoinBuilder присоединиться выбрать из MySql БД Проблема заключается в том, что SQL-запрос состоит допустима, но на Connection.Select<TEntity>(sql)InvalidCast Exception брошено. Когда я использовал JoinSqlBuilder с OrmLite.SqlServer, такой ошибки не было. Вот мой метод Код:ServiceStack.Ormlite.MySql SqlJoinBuilder Invalid Cast Exception

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

Спасибо за любые предложения!

ответ

1

нашел проблему: типа DB был bigint, который был приведен к decimal в DTO просто изменили decimal на long

+1

сделаны, спасибо =) – Romko

Смежные вопросы