Как запросить (LINQ) ссылку на ассоциацию нескольких таблиц?

У меня есть ассоциация таблиц, например (CaseClient - таблица моста):

  • В Cases много клиентов CaseClient.
  • У клиента много клиентов CaseClient
  • ClientType имеет много CaseClient

Самый простой способ - просто использовать представление в базе данных, но я слышал, что с помощью linq вы можете как-то присоединиться к этому? Или я должен просто создать представление в базе данных и linq запросить это представление?

я ценю ваш комментарий


person user53659    schedule 10.01.2009    source источник


Ответы (2)


Я думаю, вы хотите использовать метод Join из вашей таблицы соединений и разрешать каждое из ваших отношений. Например.

// Where CaseId and TypeId are your members of CaseClient
var x = caseClients.Join( cases, cc => cc.CaseId, c => c.Id)
                                .Join( types, cc => cc.TypeId, t => t.Id)
                                .Select();

Приведенный выше код непроверен (пока) и из памяти. Возможно, вам придется поместить Select между двумя соединениями.

person Ray Hayes    schedule 10.01.2009
comment
.Select не нужен (и, возможно, неправильный, если я правильно помню), если у вас нет функции выбора, которая извлекает некоторое подмножество объединенных столбцов. - person tvanfosson; 10.01.2009

Вот адаптация того, что я сделал для очень похожей ситуации. Только имена были изменены, чтобы защитить невиновных.

IEnumerable<Case> getCaseByClient(int client_id)
{
    var ret = from c in Cases
              join cc in CasesClients
                on c.Id equals cc.ClientId
              join cl in Clients
                on cc.ClientId equals client_id
              select c;
    return ret;
}

конечно, это предполагает, что ваше поле client_id имеет тип int, но его достаточно легко изменить.

person Community    schedule 16.05.2009