c# - List<int> 需要很长时间才能使用 Nhibernate Criteria 进行实例化

标签 c# nhibernate list criteria

我有这个查询,它返回 7 行并在数据库中花费 4 毫秒,但在实例化时花费 1075 毫秒。这只是时代的一个例子,它因对象而异,但花费这么长时间似乎没有意义。关于如何提高速度的任何指示?

var criteria =
                GetSession().CreateSQLQuery(
                    @"
                    select circt_id as CircuitId from normal_upstream
                        where dni_equip_type = 'A'

                        start with up_equip_stn_no in (:UpStationNo1)
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select circt_id as CircuitId
                        from normal_upstream 
                        where up_equip_stn_no in (:UpStationNo1)")
                    .AddScalar("CircuitId", NHibernateUtil.Int32).SetParameterList("UpStationNo1",upstreamStations)
                    .List<int>()

生成的 SQL 查询

   select
     circt_id as CircuitId 
from normal_upstream

where dni_equip_type = 'A'

                            start with up_equip_stn_no in (
    'B' /* :p0 */)
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select
 circt_id as CircuitId
                        from normal_upstream       
where up_equip_stn_no in (
    'B' /* :p1 */)

感谢任何帮助。谢谢

最佳答案

显然是 SetParameterList 调用减慢了速度。当我格式化 SQL 之前,我得到了 8ms 数据库和 485ms 实例化的东西,这是可以接受的。我想要更快的东西,但现在就可以了。

这是我目前使用的代码:

var sql =
            String.Format(
                @"select circt_id as CircuitId from normal_upstream
                where dni_equip_type = 'FDR_OCR'
                        start with up_equip_stn_no in ({0})
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select circt_id as CircuitId
                        from normal_upstream 
                        where up_equip_stn_no in ({0})",
                String.Join(",",upstreamStations.Select(x=>"'"+x+"'").ToArray()));
        var criteria =
            GetSession().CreateSQLQuery(sql)
                .AddScalar("CircuitId", NHibernateUtil.Int32)
                .List();
            return criteria;

关于c# - List<int> 需要很长时间才能使用 Nhibernate Criteria 进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286473/

相关文章:

c# Entity Framework EF 4.1 在运行时更改架构和数据库名称

NHibernate:如何获取映射值?

php - 世界所有国家的 list /数据库?

list - 在 JavaFX 中使用 ListProperty

c# - 显示当前时间 WPF

c# - 无法将包含 %45 的值传递给 REST API

c# - .NET 中的字符串标记

c# - 流利的 Nhibernate : Query to retrieve distinct values

nhibernate - HQL:OR 子句返回更少的记录而不是更多的记录

python - 字典列表,按列表键无交集