这是我的域类:
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。
在此处答案的帮助下: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();
我不太确定这是如何工作的,但是......