Объединение нескольких таблиц один-ко-многим с Linq to SQL - PullRequest
0 голосов
/ 18 ноября 2010

Ну, я пытаюсь объединить 3 таблицы, вот краткое изложение их

пользователь - идентификатор, имя, .....

contactdetails - идентификатор, деталь, ...., userId

адрес - идентификатор, адрес, ....... contactdetailsId

как мне объединить эти 3 таблицы с linq to sql?

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

Напишите что-то вроде (я не могу зачитать всю структуру БД из вашего вопроса):

var q = from a in ctx.address
select new {
    a.address,
    a.concactdetails.detail,
    a.contactdetils.user.name
};

При наличии отношений «один ко многим» проще всего базировать запрос на таблице.который "является наиболее много".Можно сделать это наоборот и использовать опции LoadWith.К сожалению, linq-to-sql поддерживает преобразование двух таблиц в эффективные запросы только тогда, когда это сделано.Если вы попробуете это с тремя таблицами, вы получите множество небольших запросов на выборку в одну строку, которые ужасно снижают производительность БД (см. http://coding.abel.nu/2011/11/always-check-generated-sql/ для примера).

0 голосов
/ 02 мая 2012
        ContactDetail[] ContactDetails = new ContactDetail[0]; // your contact detail entries
        Address[] Addresses = new Address[0]; // your address entries
        User[] Users = new User[0]; // your user entries
        Users.Join(ContactDetails, user => user.ID, cd => cd.ID, (user, cd) => new { User = user, ContactDetail = cd }).Join(Addresses, UserAndCD => UserAndCD.ContactDetail.ID, address=>address.ContactDetailID, (UserAndCD, address)=> new {User = UserAndCD.User, ContactDetail = UserAndCD.ContactDetail, Address = address});

В этом случае вы получите записи user-contactdetail-address.Если вы хотите получить пользователя с перечислением контактных данных и перечислением адресов для каждого контакта, то вы должны использовать GroupJoin:

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