Linq-Nhibernate左连接

Linq-Nhibernate左连接,linq,nhibernate,fluent-nhibernate,linq-to-nhibernate,Linq,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,盗窃具有行为属性 这是我试图让NHibernate.Linq生成的查询: SELECT * FROM `thefts` LEFT JOIN memberThefts ON thefts.id = memberThefts.theftId AND memberThefts.memberId = 1 我想得到一个所有盗窃案的列表,其中action.memberId==某个数字,或者如果找不到一行,则为null,这就像一个简单的查询,但它整天都在给我带来噩梦 thefts = ses

盗窃具有行为属性

这是我试图让NHibernate.Linq生成的查询:

SELECT * FROM `thefts`
LEFT JOIN memberThefts
ON thefts.id = memberThefts.theftId AND memberThefts.memberId = 1
我想得到一个所有盗窃案的列表,其中action.memberId==某个数字,或者如果找不到一行,则为null,这就像一个简单的查询,但它整天都在给我带来噩梦

        thefts = session.Query<Theft>()
            .Fetch(x => x.action)
            .Where(x => x.action.memberId == member.id)
            .ToList();
盗窃类别:

    public class Theft
    {
        public virtual byte id { get; set; }
        public virtual string name { get; set; }
        public virtual byte rank { get; set; }
        public virtual byte chance { get; set; }
        public virtual MemberTheft action { get; set; }
...
它的映射:

public TheftMap()
{
    Table("thefts");
    Id(x => x.id);
    Map(x => x.name);
    Map(x => x.id);
    Map(x => x.chance);
    References(x => x.action)
        .Nullable()
        .PropertyRef(x => x.theftId)
        .Column("id");
}

任何解决方案都可以执行HQL、QueryOver等功能,但不能使用LINQ提供程序,但可以使用QueryOver执行。大致如下:

MemberTheft memberAlias = null;
var result = Session.QueryOver<Theft>()
                    .Left.JoinQueryOver(x => x.action, () => memberAlias)
                    .Where(() => memberAlias.memberId == member.id);
MemberTheftMemberAlias=null;
var result=Session.QueryOver()
.Left.JoinQueryOver(x=>x.action,()=>memberAlias)
.其中(()=>memberAlias.memberId==member.id);

编辑:更新的查询。

不能使用LINQ提供程序进行编辑,但可以使用QueryOver进行编辑。大致如下:

MemberTheft memberAlias = null;
var result = Session.QueryOver<Theft>()
                    .Left.JoinQueryOver(x => x.action, () => memberAlias)
                    .Where(() => memberAlias.memberId == member.id);
MemberTheftMemberAlias=null;
var result=Session.QueryOver()
.Left.JoinQueryOver(x=>x.action,()=>memberAlias)
.其中(()=>memberAlias.memberId==member.id);

编辑:更新的查询。

我得到的结果是:与“NHibernate.IQueryOver.Where(System.Linq.Expressions.Expression)”匹配的最佳重载方法有一些无效的arguments@Juddling我刚刚更新了查询,测试了它,它开始工作了。如果它仍然不起作用,请你用你的映射/模型更新你的问题,这样我就可以使用它了。啊,我想*你仍然需要做
.Fetch(x=>x.action)。急切的
,我需要设置一堆测试数据,没有时间,凌晨2-30需要睡觉。我得到了:与'NHibernate.IQueryOver.Where'匹配的最佳重载方法(System.Linq.Expressions.Expression)“”具有一些无效的arguments@Juddling我刚刚更新了查询,对它进行了测试,它正在运行。如果它仍然不起作用,请用您的映射/模型更新您的问题,以便我可以使用它。啊,我认为*您仍然需要执行
.Fetch(x=>x.action).Eager
,我需要设置一组测试数据,没有时间,凌晨2-30需要睡觉。