Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
degvelo
1 / 1 / 0
Регистрация: 06.09.2015
Сообщений: 81
Завершенные тесты: 7
#1

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

01.12.2016, 12:14. Просмотров 325. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выборка из трех таблиц (C#):

SQLite Выборка из трех таблиц с функцией count() - C#
У меня имеется три таблицы, связанные внешним ключами: create table office(id_office INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ...

Выборка из нескольких таблиц - C#
подскажите как правильно осуществить запрос...? есть несколько таблиц таблица 1: t1.id(int),t1.name(int) Таблица 2: ...

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

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

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

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

4
Shamil1
Модератор
2056 / 1362 / 264
Регистрация: 26.03.2015
Сообщений: 4,965
02.12.2016, 14:45 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
8646 / 7651 / 2810
Регистрация: 17.03.2014
Сообщений: 15,024
Записей в блоге: 1
02.12.2016, 20:45 #3
degvelo, нужно добавить using System.Data.Entity; т.к. Include<T, TProperty>() это extension метод объявленный в System.Data.Entity.QueryableExtensions.
0
degvelo
1 / 1 / 0
Регистрация: 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
Модератор
2056 / 1362 / 264
Регистрация: 26.03.2015
Сообщений: 4,965
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
Привет! Вот еще темы с ответами:

Выборка из двух таблиц и Inner Join - C#
выбираю данные из двух таблиц select tehnika.num_teh as Наименование,hist_remont.date_izm from tehnika,hist_remontздесь всё ОК теперь...

Выборка из нескольких несвязных таблиц - C#
Есть две таблицы Car и Man С помощю запроса &quot;select * from Car,Man&quot; пытаюся выбрать все данные из двух таблиц в ArrayList для...

Выборка данных из связанных таблиц - C#
Всем привет! Столкнулся с проблемой выборки данных из связанных таблиц.Есть БД Access, читаю с помощью OLEDB. Есть 2 таблицы: 1...

Выборка с двух таблиц по очереди (последовательно) - C#
Всем привет! Подскажите как организовать выборку из нескольких таблиц по очередности с учетом времени? Как объяснить...что бы короче и...


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

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

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