2014-09-15 4 views
1

Мне нужна помощь с выражением linq.EF Linq Оператор Select

Мне нужно сделать select * from ZipCodeCarrierRoute столом, но только получить дочерние объекты от Contact_CarrierCodeAssignments и contacts where Contacts.Active = true.

и помощь будет оценена.

enter image description here

UPDATE: Вот ответ JSON для @Yuliam решения предлагается. Это все еще не совсем верно.

enter image description here

+0

Создайте класс модели со всеми полями, которые вы хотите, чем напишите оператор linq, используя свойства навигации. –

+0

Не так много. Я не уверен, как получить доступ к контакту в подзапросе. У меня есть db.ZipCodeCarrierRoute.Where (x => x == ZipCode), который был исходным выражением linq. Отсюда я вижу Cotact_CarrierCode_Assignment, но я не вижу объект Contact. – Tim

ответ

2

Если я вас правильно понял вы хотите получить ZipCodeCarrierRoute, который включает в себя только активный Contact_CarrierCodeAssignments.

var query = db.ZipCodeCarrierRoute 
    .Where(x => x.ZipCode == ZipCode) 
    .Select(x => new 
    { 
     ZipCodeCarrierRoute = x, 
     Contact_CarrierCodeAssignments = x.Contact_CarrierCodeAssignments 
      .Where(y => y.Contact.Active) 
    }) 
    .AsEnumerable() 
    .Select(a => a.ZipCodeCarrierRoute); 

var list = query.ToList(); 
+0

Спасибо @Yuliam, это очень близко. Проблема в том, что я получаю только один контакт в коллекции. Для тестового элемента у меня есть 2 назначения, связанные с контактами, поэтому я должен получить 2 обратно. Используя этот оператор, если я установил первый контакт в «Неактивный», я получаю второй контакт, который все еще активен. Когда я верну контакт к активному, я получаю только этот контакт. – Tim

+0

@Tim, вам нужно выполнить код еще раз после изменения значения в базе данных, это должно включать 'Contact_CarrierCodeAssignments', где' Контакт' активен –

+0

Я сделал, я неправильно прочитал ответ json. Он возвращает второй контакт. Спасибо – Tim

0

Вот что-то я думаю, что на верхней части моей головы, я не проверял его на компьютере или LINQPad

var query = 
    from zipCodeCR in db.ZipCodeCarrierRoute. 
    where zipCodeCR.Contact_CarrierCodeAssignments.All(contact_codeAssignment => contact_codeAssignment.Contact.Active==true) 
    select zipCodeCR; 
+0

Не совсем. Я шел по этому пути, но я использовал Any вместо All. var routes = from a in db.ZipCodeCarrierRoutes где a.ZipCode == zipCode && a.Contact_CarrierCode_Assignments.Any (x => x.Contact.Active == true) ; дал мне правильную конструкцию, но не правильный результат. Использование вашего предложения не возвращало никаких заданий или контактов – Tim

Смежные вопросы