如何在NHibernate标准中转换Lambda表达式
本文关键字:转换 Lambda 表达式 标准 NHibernate | 更新日期: 2023-09-27 18:12:27
我有这个类
public class MyClass
{
public int Id { get; set;}
public string Name { get; set; }
public IList<MyClass> Classes { get; set; }
}
我正在使用Fluent NHibernate,我有这个automappinoverride:
public void Override(AutoMapping<MyClass> mapping)
{
mapping.HasManyToMany(m => m.Classes)
.ParentKeyColumn("ClassId")
.ChildKeyColumn("SecondClassId")
.Table("ClassesRelation")
.Cascade.SaveUpdate();
}
我在我的Repository中有这个方法:
public IList<MyClass> ClassesThatContains(MyClass @class)
{
//allClasses.Where(tempClass => tempClass.Classes.Contains(@class))
string query = string.Format(@"SELECT Class.* FROM Class WHERE Class.Id IN (SELECT ClassesRelation.ClassId FROM ClassesRelation WHERE ClassesRelation.SecondClassId = {0})", @class.Id);
var criteria = NhSession.CreateSQLQuery(query).AddEntity(typeof(MyClass));
return criteria.List<MyClass>();
}
在ClassesThatContains方法中,我有相当于SQL语句的注释,但是NHibernate不知道包含Linq方法....所以我使用了SQL语句,但是我如何将这个SQL语句转换为标准呢?
对象:ClassRelation不是Class
Nhibernate在版本3中内置了一个linq提供程序,在版本2中作为一个插件。你可以这样修改方法::
from c in session.Query<MyClass>()
from cr in session.Query<ClassRelation>()
where c.FirstId == cr.Id
where cr.SecondId = @class.Id
select c.Id;
或者更接近你实际想要查询的内容。