c# - Linq to NHibernate 返回与 HQL 不同的结果?

标签 c# linq nhibernate fluent-nhibernate hql

我有这个基本的实体设置:

public class Instrument
{
    public virtual int Id { get; set; }
    public virtual Guid? InstrumentGuid { get; set; }
    public virtual string FIPSCode { get; set; }
    public virtual IList Names {get; set;}
}

public class Name
{
    public virtual int Id {get; set;}
    public virtual string Name {get; set;}
    public virtual Instrument Instrument {get; set;}
}

映射:

public class InstrumentMap: ClassMap<Instrument>
{
    public InstrumentMap()
    {
        Id(x => x.Id);
        Map(x => x.InstrumentGuid).Not.Nullable();
        Map(x => x.FIPSCode).Not.Nullable();
        HasMany(x => x.Names).Casecade.All;
    }
}

public class NameMap : ClassMap<Name>
{
    public NameMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        References(x => x.Instrument);
    }
}

那么,为什么当我执行这两个查询时会得到不同的结果?

var namelist = from name in Session.Linq()
    where name.Instrument.Id == 1
    select name;

我得到 3 个结果,其中 2 个 Instrument.Id = 1 和 1 个 Instrument.Id = 4 对比:

var querystr = "select name From Name as name where name.Instrument.Id = 1";
var hqlresult = Session.CreateQuery(querystr).List();

这只会得到 Instrument.Id = 1 的 2 个结果。

有人可以解释 Id = 4 在 Linq 查询中的来源,还是 NHibernate.Linq 还不太稳定? 谢谢!

最佳答案

这听起来像是您使用的 linq 提供程序中的错误。您使用的 linq 提供程序来自 NHibernate.Contrib。此提供程序基于标准 api。此 api 可能会生成与 hql 不同的 sql。这两个查询创建的 sql 是什么?

在 NHibernate trunk 中是一个新的基于 hql 的 linq provider。此 linq 提供程序将生成与 hql 相同的 sql。我在当前使用的应用程序中从旧提供程序转移到新提供程序。它似乎比旧版本具有更多功能,但仍未完成。

关于c# - Linq to NHibernate 返回与 HQL 不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375433/

相关文章:

c# - 来自 C# 的 SQL 查询

c# - 流是什么意思?它的特点是什么?

c# - mongo.linq 与 c# linq 之间的区别

c# - 将范围添加到同一命令行/行中的新对象列表

c# - 需要nHibernate指南来做CRUD

c# - 如何从随机生成的字符中形成组合?

c# - 如何修复这个 LINQ 函数?

c# - 异常 : Type arguments cannot be inferred when using LINQ

c# - NHibernate.Spatial 和 Sql 2008 地理类型

nhibernate - HQL 中 setParameterList 的可选参数