假设我有以下课程:
public class Fund : EntityBase
{
public virtual string Name { get; set; }
public virtual IList<FundDetail> FundDetails { get; set; }
public virtual IList<FundAlias> FundAliases { get; set; }
public Fund()
{
FundDetails=new List<FundDetail>();
FundAliases=new List<FundAlias>();
}
}
public class FundDetail : EntityBase
{
public virtual string Symbol { get; set; }
public virtual Fund Fund { get; set; }
}
public class FundAlias : EntityBase
{
public virtual string Symbol { get; set; }
public virtual string Name { get; set; }
public virtual Fund Fund { get; set; }
}
我的查询:
filterValue =&#34; sometext&#34;
var criteria = session.CreateCriteria<Fund>();
criteria.CreateAlias("FundDetails", "fd", JoinType.LeftOuterJoin);
criteria.CreateAlias("FundAliases", "fa", JoinType.LeftOuterJoin);
criteria.Add(
Restrictions.InsensitiveLike("fd.Symbol", filterValue, MatchMode.Anywhere) ||
Restrictions.InsensitiveLike("Name", filterValue, MatchMode.Anywhere) ||
Restrictions.InsensitiveLike("fa.Symbol", filterValue, MatchMode.Anywhere));
criteria.SetFirstResult(0).SetMaxResults(100);
criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
var list = criteria.List<Fund>();
我试图获得所有基金,其中来自fundDetail的基金或符号的名称或来自FundAlias的符号包含简单字符串的filterValue,并获得100个结果。
因为LeftOuterJoin生成了重复的基金行,并且因为生成的查询(SQL语法)中不存在" criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());"
,尽管事实上有超过100个结果我没有得到100行,我得到不同的数字根据重复的行数。
我用“&#34;预测&#34; :
criteria.SetProjection(
Projections.Distinct(Projections.ProjectionList()
.Add(Projections.Alias(Projections.Property("Name"), "Name"))
.Add(Projections.Alias(Projections.Property("Id"), "Id"))
)
);
但我没有找到如何使用CriteriaNote为集合设置SetProjections:
我做错了什么?这是使用Criteria执行此操作的原因吗?
注意:请注意:我不想使用QueryOver执行此操作,我需要使用Criteria。
答案 0 :(得分:1)
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.kaist.se.pmpapp"
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { java.srcDirs = ['src/main/java', 'src/androidTest/java'] } } }
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
androidTestCompile 'org.robolectric:robolectric:2.4'
androidTestCompile 'junit:junit:4.12'
androidTestCompile group: 'junit', name: 'junit', version: '4.12'
}