linq - 无法解析属性(复杂属性)

标签 linq nhibernate queryover

我有一个带有NHibernate的asp.net mvc应用程序,我不知道如何解决查询某些数据的问题。我有这样的疑问:

// create query
var query = session.QueryOVer<Laudo>().Fetch(x => x.Equipament).Eager;

// add some filters
if (idEquipament.HasValue) 
  query = query.And(x => x.Equipament.Id == idEquipament.Value);

//I got the error here...
if (idCompany.HasValue)
  query = query.And(x => x.Equipament.Company.Id == idCompany.Value);

当我尝试执行此查询时,出现以下消息的异常: “无法解析属性:Equipament.Company.Id of:DomainModel.Laudo

我可以做什么来解决这个问题? 谢谢

最佳答案

您不能像这样使用其他实体属性。 NHibernate 期望表达式能够被计算为当前实体的属性。您需要使用JoinQueryOverJoinAlias加入另一个实体,然后执行 where

使用JoinQueryOver:

// ...
query = query.JoinQueryOver(x => x.Equipment)
    .JoinQueryOver(x => x.Company)
    .Where(c => c.Id == idCompany.Value);

使用JoinAlias:

Equipment equipment = null;
Company company = null;

// ...
query = query.JoinAlias(x => x.Equipment, () => equipment)
    .JoinAlias(() => equipment.Company, () => company)
    .Where(() => company.Id == idCompany.Value);

更多信息:
What is the difference between JoinQueryOver and JoinAlias?
What can be used as a NHibernate QueryOver alias?
Complex nHibernate QueryOver expression

关于linq - 无法解析属性(复杂属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386533/

相关文章:

c# - 如何在 C# 中切换 XML XDocument XElement 中的属性

.net - 错误 11 和 2002 : "The EntityContainer ... does not exist in MetadataWorkspace"

linq - 如何分配 IQueryable<T> 的属性值?

c# - NHibernate 中的非锁定事务

c# - nHibernate:无法解析属性

c# - NHibernate SQLFunction 分组依据

nhibernate - 如何使用 Criteria 或 QueryOver API 编写此 linq 查询

c# - NHibernate QueryOver<> - 通过 SubQuery 聚合函数

c# - 嵌套的 ForEach 循环到 Linq

c# - 如何将此 HQL 转换为 DetachedCriteria?