簡體   English   中英

如何在NHibernate標准中轉換此Lambda表達式

[英]How to convert this Lambda Expression in NHibernate Criteria

我有這堂課

public class MyClass
{
    public int Id { get; set;}
    public string Name { get; set; }
    public IList<MyClass> Classes { get; set; }
}

我正在使用Fluent NHibernate,並且具有以下AutoMappingOverride:

    public void Override(AutoMapping<MyClass> mapping)
    {
        mapping.HasManyToMany(m => m.Classes)
            .ParentKeyColumn("ClassId")
            .ChildKeyColumn("SecondClassId")
            .Table("ClassesRelation")
            .Cascade.SaveUpdate();
    }

我的存儲庫中有這種方法:

    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不知道Contains Linq方法...。因此,我使用了SQL語句,但是如何將該SQL語句轉換為Criteria?

觀察:ClassRelation不是一個類。

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;

或者更接近您實際想要的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM