2017-02-15 24 views
0

У меня есть два IQueryables A и B. Мне нужно выбрать все столбцы из A на основе идентификатора, доступного в A и B, а также другие условия применимы к списку B. Здесь мне не нужно делать выбор из B. Мне нужно только выбрать из A, но на основе условий, которые применяются к B. Я попробовал нижний запрос linq, но по производительности он занимает, по крайней мере, 18 секунд, чтобы загрузить слишком длинные данные. Я пытаюсь реорганизовать запрос linq, но не выполняет фильтр. Ниже я предоставил свой код, который работал, но слишком долго загружается.Сравнение двух Iqueryables на основе условия

IQueryable<A_LIST> query = ctx.getA(); 
IQueryable<B_List> parts = ctx.getB(); 

query = (from q in query 
     join s in parts 
     on q.LIST_NO equals s.LIST_NO 
     where s.TAG == "PART00213" && s.STATUS == "NEW" 
     select q).Distinct(); 

запросов, которые не работают

query = query.Where(m => parts.Any(x => x.TAG == "PART00213" &&   
&& STATUS == "NEW")); 
+0

Вы просто забыли добавить условие объединения в 'Any':' && x.LIST_NO == м. LIST_NO' –

+0

Не могли бы вы предоставить мне, где добавить это. Я попробовал это, выдает ошибку –

+0

'query = query.Where (m => parts.Any (x => x.TAG ==" PART00213 "&& x.STATUS ==" NEW "&& x.LIST_NO == m.LIST_NO)); ' –

ответ

0

Попробуйте это:

IQueryable<A_LIST> query = ctx.getA(); 
var partsIds = ctx.getB().Where(s=>s.TAG == "PART00213" && s.STATUS == "NEW").Select(s=>s.LIST_NO); 

query = query.Where(q=>partsIds.Contains(q.LIST_NO));