Я искал похожую проблему в google и stackoverflow в течение почти 2 часов, но не нашел никакого решения.
У меня есть 2 таблицы с отношением 1 ко многим.
1) [Accounts]
PK Account_Id
int User_ID
2) [Temporary_Accounts]
Fk Account_Id
char IsAccepted {'1','0',null}
varchar name
И2 сопоставленных класса
1) Acc
int Id;
User user;
TempAcc Temp; //cause each Account can have 0 or one TempAcc (with IsAccepted == null)
2)TempAcc
int Id;
bool IsAccepted;
string name;
Я хочу отобразить все учетные записи для данного user_id с дополнительной информацией (например, имя) для учетных записей, у которых есть запись в [Temporary_Accounts] и IsAccepted == null.
, поэтомуSQL должен выглядеть так:
select acc.Account_Id, acc.User_Id, tempacc.Name
from Account acc left join Temporary_Account tempacc
on (acc.Account_ID = tempacc.Account_Id and tempacc.IsAccepted is null)
where (acc.User_Id = 65);
, но мой IQueryOverquery:
IQueryOver<Acc> query = (...)
query.JoinAlias(f => f.Temp,
() => Temp,
JoinType.LeftOuterJoin)
.Where(f => f.Temp.IsAccepted == null)
.And(f => f.user.id == userid);
генерирует такой sql:
select acc.Account_Id, acc.User_Id, tempacc.Name
from Accounts acc left join Temporary_Accounts tempacc
on (acc.Account_ID = tempacc.Account_Id)
where (acc.User_Id = 65 and tempacc.IsAccepted is null);
, поэтому я получаю меньше результатов, чем в первыйправильный запрос.
У вас есть идея, что мне следует изменить или что я могу сделать, чтобы получить результаты первого запроса?Моя идея состояла в том, чтобы покинуть таблицу учетных записей с помощью подзапроса, который выбирает все учетные записи IsAccepted = null из таблицы Temporary_Accounts, но я не уверен, как это сделать в Iqueryover или Icriteria.
Буду благодарен за любые советы