如何使用 linq 和流畅的 nHibernate 连接多个表(左连接)?

问题描述 投票:0回答:1

这是我的域类:

public class File
{
    public virtual long LFD { get; set; }

    public virtual long AK_KEY_PE_WERBER { get; set; }
    public virtual long AK_KEY_PE_RECHT { get; set; }
    
    //some other properties
}

public class Employee
{
    public virtual long LFD { get; set; }
    
    //some other properties

}

这是映射类:

public class FileMap : ClassMap<File>
{
    public FileMap()
    {
        Id(x => x.LFD);
        
        Map(x => x.AK_KEY_PE_WERBER);
        
        //some other fields
    }
}

public class EmployeeMap : ClassMap<Employee>
{
    public MITARBEITERMap()
    {
        Id(x => x.LFD);
        //some other fields

    }

}

数据库包含:

文件:

LFD:1 AK_KEY_PE_WERBER:空

LFD:2 AK_KEY_PE_WERBER:1

员工:

LFD:1

所以我想创建一个获取所有文件的选择,并在可能的情况下将它们与员工加入。

我尝试过:

var contentQuery = (from file in DBSession.Query<File>()
                    join werb in DBSession.Query<Employee>()
                    on file.AK_KEY_PE_WERBER equals werb.LFD
                    select new
                    {
                        File = file,
                        Recht = werb,
                    }).ToList();
Debug.WriteLine(contentQuery.Count);

但这仅返回 AK_KEY_PE_WERBER 不为空的文件。所以计数是 1 而不是 2。

我尝试过:

var contentQuery = (from file in DBSession.Query<File>()
                    join werb in DBSession.Query<Employee>()
                    on file.AK_KEY_PE_WERBER equals werb.LFD into werbJoin
                    select new
                    {
                        File = file,
                        Recht = werbJoin.FirstOrDefault(),
                    }).ToList();

但这会引发 NotImplementedException。

c# fluent-nhibernate
1个回答
0
投票

在此处答案的帮助下:https://stackoverflow.com/a/23558389/9930052此代码似乎可以按我的意愿工作:

        var contentQuery = (from file in DBSession.Query<File>()
                            from werb in DBSession.Query<Employee>().Where(werb => werb.LFD == file.AK_KEY_PE_WERBER).DefaultIfEmpty()
                            select new
                            {
                                File = file,
                                Recht = werb,
                            }).ToList();

我不太确定这是如何工作的,但是......

© www.soinside.com 2019 - 2024. All rights reserved.