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%名”

,但我想获得 “名称等%FOO%或slovenianName等%FOO%或类似%FOO%或slovenianName等%FOO%名”

我可以使用Expression.Disjunction()为OR但是我有不能使用个createCriteria内部Expression.Disjunction问题()。谁能告诉我怎么可以使用或与个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标识{获得;组; }结果      publice虚拟字符串名称{;组;}      公共虚拟城市城市{获得;设置;} //多对一 }

类市{结果    公共虚拟INT标识{获得;组; }结果    公共虚拟字符串名称{;组; }结果    公共虚拟国家国家{获得;组; } //多对一  }

类国家{结果    公共虚拟INT标识{获得;组; }结果    公共虚拟字符串名称{;组; }结果 }

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top