2013-02-11 2 views
3

У меня есть список, и я хочу написать запрос о идентификаторах списка. Содержит конкретный идентификатор таблицы.Linq Содержит в одном запросе

я пишу это и работает так, но я хочу, чтобы написать все в одном запросе ..

List<int> tempList=yetkiUygulamaList.Select(y => y.Id).ToList(); 
query = query.Where(x => tempList.Contains(x.Uygulama.Id)); 

Неправильный запрос

query = query.Where(x => yetkiUygulamaList.Select(y =>y.Id).ToList().Contains(x.Uygulama.Id)); 
+0

в «неправильном запросе», что произойдет, если вы удалите '.ToList()'? –

ответ

0

ToList() materilizes путем выполнения запроса, и после этого NHibernate не может понять, что первый запрос должен быть включен как подзапрос.

Просто удалите ненужный ToList():

IQueryable<int> tempList = yetkiUygulamaList.Select(y => y.Id); // removed here 
query = query.Where(x => tempList.Contains(x.Uygulama.Id)); 

Приведенный выше код будет генерировать один запрос SQL. Если вы хотите придерживаться все это в # строке кода один C, просто избавиться от переменной посреднической:

query = query.Where(x => yetkiUygulamaList.Select(y => y.Id).Contains(x.Uygulama.Id)); 
+0

этот запрос выполняется, но я хочу написать один запрос для его решения. Спасибо за совет – altandogan

+0

@ user990513 Не знаете, к чему вы стремитесь ... код, который я покажу, будет генерировать один SQL-запрос. Если вам нужно меньше строк кода C#, вы можете просто удалить промежуточную переменную. Я обновил свой ответ с этим. –

0

это обязательно работает

query = query.Where(x => yetkiUygulamaList.Any(y=>y.Id == x.Uygulama.Id)); 
+0

такая же ошибка. «System.NotSupportedException: указанный метод не поддерживается». query - переменная IQueryable . – altandogan

0

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

Если я понимаю, query является «сбор» класса (назовем его AObj), содержащий свойство Uygulama и класс Uygulama содержит свойство Id и yetkiUygulamaList является «коллекция» из Uygulama

//will return a IEnumerable<AObj> 
IEnumerable<AObj> query = query.Join(yetkiUygulamaList, a => a.Uygulama.Id, u => u.Id, (a,u)=>a); 
Смежные вопросы