2010-02-08 36 views
1
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喜歡%富%」個createCriteria

但我想獲得「名稱像%foo%或斯洛文尼亞名稱像%foo%或名稱像%foo%或slovenianName像%foo%」

我可以使用Expression.Disjunction()爲或,但我有問題,我無法在Expression.Disjunction()中使用CreateCriteria。有人能告訴我如何一起使用OR和CreateCriteria?

Regards

+0

您需要提供更多信息。告訴我們你的實體。 – 2010-02-11 09:56:34

回答

3

在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; } 
} 
1

上面的例子很好,因爲其他類都是Property類的構造。

如果按此順序它不起作用。

class property { public virtual int Id {get;組; }
publice虛擬字符串名{get;設置;} 公共虛擬城市城市{get;設置;} //多對一 }

級市{
公共虛擬INT標識{獲得;組; }
public virtual string Name {get;組; }
公共虛擬國家國家{get;組; } //多對一 }

class Country {
public virtual int Id {get;組; }
public virtual string Name {get;組; }
}