2011-10-20 2 views
1

私はかなり大きなSOAソリューションを持っており、新しく追加されたサービスはNHibernateのQuery By Exampleを使用して約980万レコードをクエリします。これまでのパフォーマンスはひどいされている、およびデータベース上のプロファイルは、としてクエリを示していますNHibernateとQuery and By-Exampleを好きなように混ぜる?

exec sp_executesql N'SELECT this_.Id as Id3_0_, this_.ESIID as ESIID3_0_, this_.ADDRESS as ADDRESS3_0_, this_.ADDRESS_OVERFLOW as ADDRESS4_3_0_, this_.CITY as CITY3_0_, this_.STATE as STATE3_0_, this_.ZIP5 as ZIP7_3_0_, this_.ZIP4 as ZIP8_3_0_, this_.DUNS as DUNS3_0_, this_.PREMISE_TYPE as PREMISE10_3_0_, this_.STATUS as STATUS3_0_, this_.METER_READ_CYCLE as METER12_3_0_, this_.STATIONCODE as STATION13_3_0_ FROM vw_TDSP_ESIID this_ WHERE (lower(this_.ADDRESS) like lower(@p0) and lower(this_.CITY) like lower(@p1) and lower(this_.STATE) like lower(@p2) and lower(this_.ZIP5) like lower(@p3) and lower(this_.ZIP4) like lower(@p4))',N'@p0 nvarchar(10),@p1 nvarchar(2),@p2 nvarchar(4),@p3 nvarchar(7),@p4 nvarchar(2)',@p0=N'%110 Main%',@p1=N'%%',@p2=N'%TX%',@p3=N'%77002%',@p4=N'%%' 

だから、基本的に私のコードは次のようになりますので:

var queryEx = Example.Create(esiIdEntityProto) 
      .EnableLike(MatchMode.Anywhere) 
      .ExcludeNulls() 
      .ExcludeZeroes() 
      .IgnoreCase(); 

NHibどこでもlike演算子を使用しています、それは私がそれを設定する方法であるので、私はそれを得る。しかし、いくつかのフィールドを同じように設定し、いくつかのフィールドを等しく設定することは可能ですか?私はZip5が等しくなり、等しくなるようにする必要がありますが、残りは好きかもしれません。

QBEを壊してしまったのですか?それとも、古い基準を使用しているのでしょうか?

答えて

2

あなたは混在させることができ

.ExcludeProperty("Zip5") 


.Add(example).Add(Restrictions.Eq("Zip5", esiIdEntityProto.Zip5)) 

または

.ExcludeProperty("ADDRESS") 


.Add(example).Add(Restrictions.Like("ADDRESS", esiIdEntityProto.Address)) 
関連する問題