문제

criteriaCount.CreateCriteria(AdvertisementsProperties.City.ToString())
                .Add(Expression.Like(CitiesProperties.Name.ToString(), query, MatchMode.Anywhere))
                .Add(Expression.Like(CitiesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere))
                .CreateCriteria(AdvertisementsProperties.Country.ToString())
                .Add(Expression.Like(CountriesProperties.Name.ToString(), query, MatchMode.Anywhere))
                .Add(Expression.Like(CountriesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere));

이 반환 " %foo %및 slovenianname과 같은 이름은 %foo %및 %foo %및 slovenianname과 같은 이름과 같은 이름과 같은 이름과 같은 이름입니다."

그러나 나는 " %foo %또는 slovenianname과 같은 이름과 같은 이름과 같은 foo %또는 %foo %또는 slovenianname과 같은 이름과 같은 이름과 같은 이름을 얻고 싶습니다."

expression.disjunction ()을 사용할 수 있지만 expression.disjunction () 내부에서 CreateCriteria를 사용할 수없는 문제가 있습니다. 누군가 내가 어떻게 사용하거나, 그리고 createcriteria를 함께 사용할 수 있습니까?

문안 인사

도움이 되었습니까?

해결책

disjunction () 외부에서 CreateAlias를 사용하십시오 ().

var result = session.CreateCriteria<Property>()
    .CreateAlias("Cities", "city")
    .CreateAlias("Countries", "country")
    .Add(Restrictions.Disjunction()
        .Add(Expression.Like("city.Name", query, MatchMode.Anywhere))
        .Add(Expression.Like("city.SlovenianNam", query, MatchMode.Anywhere))
        .Add(Expression.Like("country.Name", query, MatchMode.Anywhere))
        .Add(Expression.Like("country.SlovenianNam", query, MatchMode.Anywhere))
    ).List();

해당 엔터테스는 다음과 같습니다. 바라건대 그들은 당신의 것과 비슷합니다.

class Property
{
    public virtual Guid Id { get; set; }
    public virtual IList<City> Cities { set; get; }
    public virtual IList<Country> Countries { set; get; }
}

class City
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string SlovenianNam{ get; set; }
}

class Country
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string SlovenianNam{ get; set; }
}

다른 팁

Othere 클래스는 모두 재산 계급의 헌법이기 때문에 위의 예는 잘 작동합니다.

그것이 순서대로 있다면 작동하지 않습니다.

클래스 속성 {public virtual int id {get; 세트; }
게시 가상 문자열 이름 {get; 세트;} 공공 가상 시티 시티 {get; set;} // 많은 ~ 하나}

클래스 시티 {
공개 가상 int id {get; 세트; }
공용 가상 문자열 이름 {get; 세트; }
공공 가상 국가 국가 {get; 세트; } // 많은 ~ 하나}

계급 국가 {
공개 가상 int id {get; 세트; }
공용 가상 문자열 이름 {get; 세트; }
}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top