nhibernate - QueryOver by join and add conditions by Independent if

标签 nhibernate queryover

我在 Nhibernate 3.1 中有一个 JoinQueryOver 的 QueryOver

Person类有一个Identity类的关联(一对一) Code 是 Person 类的字段,FirstName 是 Identity 类的字段。

var q = SessionInstance.QueryOver<Person>()
        .Where(p => p.Code.IsLike(code,MatchMode.Start))
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

结果是正确的,但是有一个问题。搜索不包括 Person 类中 Code 字段的空值项目。我更正了以下查询。

var q = SessionInstance.QueryOver<Person>()
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(Code))
   q = q.Where(i => i.Person.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

现在我收到此消息的运行时错误:

could not resolve property: Identity.Code of: MyNameSpace.Domain.Entities.Identity

在两个类之间的连接查询中,如何通过 if 添加两个条件(where)。

(如果参数 != null)

最佳答案

Identity identityAlias = null;
var q = SessionInstance.QueryOver<Person>()
        .Full.JoinAlias(p => p.Identity, () => identityAlias);

if (!String.IsNullOrEmpty(code))
   q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q.Where(() => identityAlias.FirstName.IsLike(firstName, MatchMode.Anywhere));

var q = SessionInstance.QueryOver<Person>();

if (!String.IsNullOrEmpty(code))
    q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
    q.Full.JoinQueryOver(p => p.Identity)
        .Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

关于nhibernate - QueryOver by join and add conditions by Independent if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452599/

相关文章:

c# - hibernate查询使用nolock时出现识别错误

C# generics - 可以创建具有 n 个泛型类型的方法..?

Nhibernate .class 在 QueryOver 中等效

sql - 是否可以使用 NH QueryOver 在一个查询中获取连接实体?

nhibernate - 在 SQL Server 2008 中,我可以将表值参数从 NHibernate 传递给我的存储过程。如何在 Oracle 中实现相同的目标

nhibernate - 使用 NHibernate 处理多个表的 JoinQueryOver

c# - NHibernate QueryOver order by 带算术运算

c# - Nhibernate Queryover Case Insensitive IsIn

c# - 使用 queryover 按月和年部分进行分组

visual-studio-2008 - 无法加载类型 'NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu'