Вопрос по nhibernate, linq-to-nhibernate, linq, fluent-nhibernate – Linq Nhibernate оставил присоединиться

0

У кражи естьдействие имущество

Это запрос яя пытаюсь заставить NHibernate.Linq произвести:

SELECT * FROM `thefts`
LEFT JOIN memberThefts
ON thefts.id = memberThefts.theftId AND memberThefts.memberId = 1

Я хочу получить список всех краж, где action.memberId == какое-то число или просто ноль, если это не такне найти строку, просто как запрос, но этовесь день мне снился кошмар!

        thefts = session.Query()
            .Fetch(x => x.action)
            .Where(x => x.action.memberId == member.id)
            .ToList();

Это выполняет следующий SQL:

select theft0_.id                 as id9_0_,
       memberthef1_.memberId      as memberId7_1_,
       theft0_.name               as name9_0_,
       theft0_.chance             as chance9_0_,
       memberthef1_.theftId       as theftId7_1_,
       memberthef1_.availableTime as availabl3_7_1_
from   thefts theft0_
       left outer join memberThefts memberthef1_
         on theft0_.id = memberthef1_.theftId,
       memberThefts memberthef2_
where  theft0_.id = memberthef2_.theftId
       and memberthef2_.memberId =1 /* ?p0 */

Класс кражи:

    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 и т. Д.

Ваш Ответ

1   ответ
5

Это можно сделать с помощью поставщика LINQ, но вы можете сделать это с помощью QueryOver. Что-то вроде:

MemberTheft memberAlias = null;
var result = Session.QueryOver<theft>()
                    .Left.JoinQueryOver(x => x.action, () => memberAlias)
                    .Where(() => memberAlias.memberId == member.id);
</theft>

Изменить: Обновленный Query.I '

Это'работает, но не показывает пустые строки:pastebin.com/yc0sghSs Juddling
Редактировать: Н.М. Я вставил неправильный код. Phill
@ Juddling Я только что обновил запрос, проверил его иработает. Если это все еще неНе работайте, пожалуйста, обновите ваш вопрос с вашими отображениями / моделями, чтобы я мог это использовать. Phill
m get: лучший перегруженный метод соответствуетNHibernate.IQueryOver <Assassinators.Entities.Theft, Assassinators.Entities.MemberTheft>.Где (System.Linq.Expressions.Expression <System.Func <Assassinators.Entities.MemberTheft, BOOL >>)» имеет несколько неверных аргументов Juddling
Ааа, я думаю * тебе еще нужно сделать.Fetch(x => x.action).EagerМне нужно настроить кучу тестовых данных, неВремя, его 2-30 утра нужно идти спать. Phill

Похожие вопросы