c# - 使用 QueryOver 进行子查询

标签 c# nhibernate subquery queryover

我在使用带有 queryover 的子查询时遇到问题。

这就是我所拥有的

      var address = QueryOver.Of<Address>()
            .Where(x => x.City.IsLike("%" + city + "%")).Select(x => x.Person.Id);

        var result = Session.QueryOver<Person>()
            .Where(x => x.Type.IsLike(type + "%"))
            .And(x => x.Name.IsLike("%" + name + "%"))
            .WithSubquery.WhereExists(address);

我有一个人员表,并且一个人有多个地址。

所以 人 ID、名称、类型

和地址将有 PersonId和城市等

所以想按姓名和类型以及地址表中的城市搜索人员

最佳答案

尝试这样的事情:

Address address = null;
Person person = null;
var addressSubQuery = QueryOver.Of<Address>(() => address)
    .Where(Restrictions.EqProperty(Projections.Property(() => address.Person.Id), Projections.Property(() => person.Id)))
    .Where(() => address.City.IsLike("%" + city + "%"));

    var result = Session.QueryOver<Person>(() => person)
        .Where(x => x.Type.IsLike(type + "%"))
        .And(x => x.Name.IsLike("%" + name + "%"))
        .WithSubquery.WhereExists(addressSubQuery);

您需要使用 QueryOver 的别名版本。这样您就可以从其他查询中引用 Person 元素,这些查询最终将链接到您的主查询中。

这与执行以下操作相同

Select * from Person
Where 
    Type like '%foo%'
    and Name like '%bar%'
    and exists ( select Id from Address 
                 where 
                      Address.PersonId = Person.Id
                      and Address.City like '%bar%' )

关于c# - 使用 QueryOver 进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328287/

相关文章:

c# - WPF 应用程序的 Windows 8 平铺图标?

c# - 如何合并多个序列

c# - .NET 多个 gmail 帐户与 2 个网络浏览器控件

c# - Fluent NHibernate 加入约束

c# - 优化 nHibernate 中的最小和最大查询

hibernate - 在 GORM 中查询关联的子查询

MySQL单表子查询

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

c# - 固定大小数组

NHibernate 子对象更新