如何在 NHibernate Criteria 中转换此 Lambda 表达式

发布于 2024-12-12 00:44:41 字数 1239 浏览 0 评论 0原文

我有这个类,

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 不是类。

I have this class

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

I am using Fluent NHibernate, and I have this AutoMappingOverride:

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

And I have this method on my 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>();
    }

In the method ClassesThatContains I have the comment that is equivalent to SQL Statement, but NHibernate dont know Contains Linq method....So I used SQL Statement, but how can I convert this SQL Statement to Criteria like?

Obs: ClassRelation is not a Class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

涙—继续流 2024-12-19 00:44:41

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;

或者更接近您实际想要的查询的方法。

Nhibernate has a linq provider in version 3 built in and as an addon in version 2.
You could just change the method like so::

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;

Or something more closer to your query you actually want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文