質問

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の%と%のfoo%などの%fooというの%とslovenianNameのような名前のような%fooというの%のような名前とslovenianName"

しかし、私は取得したいと思い、 "%fooの%や%のfoo%などの%fooというの%またはslovenianNameのような名前のような%fooというの%またはslovenianNameような名前"

私は、ORのためExpression.Disjunction()を使用することができますが、私は()私はExpression.Disjunction内のcreateCriteriaを使用できないという問題があります。誰かが私が一緒にORとのcreateCriteriaを使用する方法を教えてもらえます?

よろしく

役に立ちましたか?

解決

論理和外部使用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();

対応entitesは以下の通りです。うまくいけば、彼らはあなたに似ています。

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クラスの両方が、Propertyクラスの構成であるため、

上記の例の良い働きます。

それがこの順である場合、

それは動作しません。

クラスプロパティ{      パブリック仮想int型IDは{取得します。セットする; }
     publice仮想文字列名{取得します。セットする;}      パブリック仮想都市の都市{取得します。セット;} //多くの1に }

クラスの市{
   パブリック仮想int型IDは{取得します。セットする; }
   パブリック仮想文字列の名前{取得します。セットする; }
   パブリック仮想国の国{取得します。セットする; } // 1に、多くの  }

クラスの国{
   パブリック仮想int型IDは{取得します。セットする; }
   パブリック仮想文字列の名前{取得します。セットする; }
}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top