Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
degvelo
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 81
Завершенные тесты: 7
#1

Выборка из трех таблиц

01.12.2016, 12:14. Просмотров 853. Ответов 4

Есть три модели для Codefirst:
C#
1
2
3
4
5
6
7
8
9
10
11
public class Client
    {
        public int ClientId { get; set; }
 
        public string Name { get; set; }
 
        public Contacts contact { get; set; }
 
        public Car Car { get; set; }
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class Contacts
    {
        [Key] //primary key
        [ForeignKey(nameof(Client))]
        public int ClientId { get; set; }
        
        public string tel { get; set; }
        
        public string email { get; set; }
        
        public Client Client { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Car
    {
        [Key] //primary key
        [ForeignKey(nameof(Client))]
        public int ClientId { get; set; }
        
        public string Brand { get; set; }
        
        public string BuildYear { get; set; }
 
        public int Mileage { get; set; }
        
        public Client Client { get; set; }
    }
Связи
Client -> Contact один к одному
Client -> Car один к одному

Пытаюсь сделать проекцию, чтобы при выборке из таблицы Client автоматически подтягивались данные из таблиц Contact и Car. Использую для этого метод Include

C#
1
2
3
4
5
6
stoContext stoCon = new stoContext() // Создаю контекст
 
 var clients = stoCon.Clients                 // Делаю запрос
                    .Include(c => c.contact)
                    .Include(c=>c.Car)
                    .ToList();
Вот тут то и возникает проблема. Эти выражения c => c.contact c=>c.Car студия подчеркивает и ругается что лямбда выражения не могут быть string.

Можно конечно обойти вот таким запросом
C#
1
2
3
4
5
6
7
8
9
var clients = stoCon.Clients.Select(c => new
                {
                    Name = c.Name,
                    Tel = c.contact.tel,
                    Email = c.contact.email,
                    CarBrand = c.Car.Brand,
                    BuilYear = c.Car.BuildYear,
                    Mileage = c.Car.Mileage
                }).ToList();

Но просто интересно почему ошибка с Include ??? Поможет кто разобраться?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2016, 12:14
Ответы с готовыми решениями:

Выборка из трех таблиц с функцией count()
У меня имеется три таблицы, связанные внешним ключами: create table...

Выборка из нескольких таблиц
Здравствуйте! Столкнулся с непониманием, как составить запрос для выборки...

Выборка с двух таблиц
Подскажите пожалуйста как решить следующую задачу? Имеется 3 таблицы 1 главная...

Выборка из нескольких таблиц
Здравствуйте, в задании курсача стоит такой пункт: сделать выборку некоторых...

Выборка таблиц из БД Oracle
необходимо создать программу на с# которая будет брать данные из таблиц Oracle...

4
Shamil1
Модератор
2110 / 1419 / 323
Регистрация: 26.03.2015
Сообщений: 5,150
02.12.2016, 14:45 #2
Лучший ответ Сообщение было отмечено degvelo как решение

Решение

Цитата Сообщение от degvelo Посмотреть сообщение
Эти выражения c => c.contact c=>c.Car студия подчеркивает и ругается что лямбда выражения не могут быть string.
Посмотрите внимательно на метод Include() - какого типа аргументы он принимает. Вероятно, он принимает только тип string. Тогда нужно писать
C#
1
2
3
4
5
6
stoContext stoCon = new stoContext() // Создаю контекст
 
 var clients = stoCon.Clients                 // Делаю запрос
                    .Include("contact")
                    .Include("Car")
                    .ToList();
1
OwenGlendower
Супер-модератор
Эксперт .NET
9075 / 8019 / 3427
Регистрация: 17.03.2014
Сообщений: 15,855
Записей в блоге: 1
02.12.2016, 20:45 #3
degvelo, нужно добавить using System.Data.Entity; т.к. Include<T, TProperty>() это extension метод объявленный в System.Data.Entity.QueryableExtensions.
0
degvelo
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 81
Завершенные тесты: 7
03.12.2016, 13:50  [ТС] #4
Shamil1 спасибо Вы правы. Странно только что на профессорвеб и метанит в примерах пишут вот так
C#
1
2
3
4
var clients = stoCon.Clients                 // Делаю запрос
                    .Include(c => c.contact)
                    .Include(c=>c.Car)
                    .ToList();
Это реально вводит в заблуждение.
0
Shamil1
Модератор
2110 / 1419 / 323
Регистрация: 26.03.2015
Сообщений: 5,150
03.12.2016, 16:32 #5
Возможно, у Вас старая версия фреймворка.
0
03.12.2016, 16:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2016, 16:32

Кривая выборка из 4 таблиц
Добрый день Ув. программисты! Подскажите пожалуйста, делаю выборку из 4-х...

Выборка из нескольких таблиц
подскажите как правильно осуществить запрос...? есть несколько таблиц ...

Выборка из двух таблиц и Inner Join
выбираю данные из двух таблиц select tehnika.num_teh as...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru