Подзапрос в Linq для NHibernate - PullRequest
       28

Подзапрос в Linq для NHibernate

3 голосов
/ 22 февраля 2012

У меня есть запрос по Linq в NHibernate 3.1:

public IList<Person> Search()
{
    var sub_q = SessionInstance.Query<Person>().Where(x => x.Id < 6).Select(x => x.Id);

    var q = SessionInstance.Query<Person>();
    q = q.Where(x => sub_q.Contains(x.Id));

    return q.ToList<Person>();
}

Идентификационный столбец является первичным ключом в базе данных. Этот подзапрос не работает.Количество моего запроса с подзапросом равно количеству моего запроса без использования подзапроса.

Количество подзапросов моего запроса: 52 // Правильный счет 5

Количествомой запрос без подзапроса: 52

Почему?

Обновлено: Моя проблема решена путем переименования x Переменная в sub_q в xx

 var sub_q = SessionInstance.Query<Person>().Where(xx => xx.Id < 6).Select(xx => xx.Id);

Почему?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Применить метод ToList для sub_q может решить вашу проблему, потому что может быть проблема linq отличается выполнение ..

код похож на

var sub_q = SessionInstance.Query<Person>()
                   .Where(x => x.Id < 6).Select(x => x.Id).ToList(); 
    var q = SessionInstance.Query<Person>();    
 q = q.Where(x => sub_q.Contains(x.Id)); 

ИЛИ вы можете попробовать

q = q.Where(x => (SessionInstance.Query<Person>()
                 .Where(x => x.Id < 6).Select(x => x.Id)).Contains(x.Id)); 

, не уверенный насчет вышеупомянутого второго решения

, но я думаю, что вам нужно сделать ToList(), чтобы решить проблему с другим исполнением ..

0 голосов
/ 25 февраля 2012

Моя проблема решена путем переименования x переменной в sub_q в xx

 var sub_q = SessionInstance.Query<Person>().Where(xx => xx.Id < 6).Select(xx => xx.Id); 

x в подзапросе переопределить на x в запросе. Сменив его имя, моя проблема решена.

...