Фильтровать результаты по результатам другой переменной? - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь создать приложение диспетчера контактов как часть моего основного приложения, и сейчас мне нужен небольшой совет. У меня есть 2 таблицы, посвященные управлению контактами.

Первая таблица (Контакты) содержит основную информацию о каждом контакте: Поля: ID, Имя, Фамилия, Электронная почта, Телефон, Компания

Вторая таблица - это таблица соответствия поиска (AssignedContacts), в которой содержится ссылочный идентификатор для случая, которому должен быть назначен контакт, и идентификатор контакта: Поля: ID, ReferenceCaseID, ContactID

Теперь я пытаюсь создать представление, которое возвращает список контактов, назначенных для дела. Представление получит ReferenceCaseID в качестве параметра.

Я застрял на том, как кодировать в контроллере для установки переменной.

public ActionResult Contacts(int id)
    {

        var Contacts = <insert logic to filter contacts to just those assigned based on the parameter passed>

        if (Contacts == null)
            return HttpNotFound();

        return View(Contacts);
    }

Я знаю, что могу получить список назначенных контактов, используя ниже:

var AssignedContacts = _context.AssignedContacts.Where(c => c.ReferenceCaseID == id).ToList();

Но я честно запутался в том, как теперь взять этот результат и отфильтровать контакты, используя это.

Любая помощь очень ценится. Дайте мне знать, если у вас есть какие-либо вопросы по этому поводу, поскольку это трудно объяснить с помощью текста.

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

Вы должны присоединиться к идентификатору контакта между двумя объектами, «Назначенные контакты» и «Контакты», а затем отфильтровать, где идентификатор ссылки - это то, что вы передали.

Не проверено для вашей ситуации, но может помочь вам начать:

var contactsMatching= (from c in dbContext.Contacts 
                 join ac in dbContext.AssignedContacts on 
                 c.ID equlas ac.ContactID
                 where ac.ReferenceCaseID==<your provided id>
                  select Contact{
                     ID = c.ID,
                     FirstName= c.FirstName,
                     ..snip..
                 }).ToList();
0 голосов
/ 19 марта 2019

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

public ActionResult Contacts(int id)
    {

        var Contacts =
                from contact in _context.Contacts
                join assignedcontact in _context.AssignedContacts on contact.Id equals assignedcontact.ContactId
                where assignedcontact.ReferenceCaseID == id
                select contact;

        if (Contacts == null)
            return HttpNotFound();

        return View(Contacts);
    }
0 голосов
/ 18 марта 2019
var contacts = _context.AssignedContacts.Where(ac => ac.ReferenceCaseID == id)
    .Join(_context.Contacts, assigned => assigned.ContactID, contact => contact.ID,        
        (assigned, contact) => contact);

Я не могу проверить это, так как у меня нет всего вашего кода, но в основном вы начинаете с того, что сделали - фильтровали таблицу AssignedContacts.

Затем вы присоединяете результатс таблицей Contacts в соответствии с ключами ContactID и ID из обеих таблиц.

Наконец, вы выбираете контакты полученного объединения.


В качестве альтернативы вы можетеобъедините таблицы и затем отфильтруйте:

var contacts = _context.Contacts.Join(_context.AssignedContacts, contact => 
    contact.ID, assigned => assigned.ContactID, (contact, assigned) => 
        new { Contact = contact, ReferenceCaseID = assigned.ReferenceCaseID } )
    .Where(contactWithRefId => contactWithRefId.ReferenceCaseID == id);

Здесь вы начинаете с таблицы Contacts и соединяете ее с таблицей AssignedContacts в соответствии с ключами ID и ContactID из обеих таблиц.

Затем вы создаете новый тип анонимного объекта, который представляет собой контакт с ReferenceCaseID (это означает, что у вас могут быть дубликаты контактов с разными ReferenceCaseID).

Наконец, вы используете where чтобы отфильтровать эти новые объекты контактов по ReferenceCaseID, который удалит все ненужные контакты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...