powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ : 2 таблицы, связь 1 ко Многим
5 сообщений из 5, страница 1 из 1
LINQ : 2 таблицы, связь 1 ко Многим
    #37110665
NYMEZIDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица А(idA, name), есть связная ей таблица B(idB,number,p_idA)
связь 1:М через idA : p_idA

Не соображу как вытащить все записи А, удовлетворящим условию B.number = 5

писал типо этого:
Код: plaintext
1.
2.
A.Where(t => B.Where(tt => tt.number  == 5));
A.Where(t => t.B.Where(tt => tt.number  == 5));
ошибка синтаксиса

потом получил это:
Код: plaintext
A.Where(t => t == B.Where(tt => tt.number  == 5));
выводит записей 0, хотя в B.Where(tt => tt.number == 5) столько записей сколько нужно.

Дальше так:
Код: plaintext
A.Where(t => B.Where(tt => tt.number == 5).Any());
получаю записей в 20 раз больше чем нужно, сплошные повторы. (

Нужна помощь. Не понимаю принцип реализации связи 1:M в LINQ. :(
...
Рейтинг: 0 / 0
LINQ : 2 таблицы, связь 1 ко Многим
    #37110801
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо использовать соединение Join

Стандартный пример с мсдна.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Person magnus = new Person { Name = "Hedlund, Magnus" };
                Person terry = new Person { Name = "Adams, Terry" };
                Person charlotte = new Person { Name = "Weiss, Charlotte" };

                Pet barley = new Pet { Name = "Barley", Owner = terry };
                Pet boots = new Pet { Name = "Boots", Owner = terry };
                Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
                Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

                List<Person> people = new List<Person> { magnus, terry, charlotte };
                List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };
                
                // Create a list of Person-Pet pairs where 
                // each element is an anonymous type that contains a
                // Pet's name and the name of the Person that owns the Pet.
                var query =
                    people.Join(pets,
                                person => person,
                                pet => pet.Owner,
                                (person, pet) =>
                                    new { OwnerName = person.Name, Pet = pet.Name }).ToList();

                Parallel.ForEach(query, x => Console.WriteLine("{0} {1}", x.Pet, x.OwnerName));
                Console.ReadKey();
...
Рейтинг: 0 / 0
LINQ : 2 таблицы, связь 1 ко Многим
    #37110967
NYMEZIDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Получилось

Код: plaintext
1.
2.
3.
A.Join(B.Where(t => t.number == 5),
                     a => a.idA,
                     b => b.p_idA,
                     (a, b) => a)
...
Рейтинг: 0 / 0
LINQ : 2 таблицы, связь 1 ко Многим
    #37120884
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NYMEZIDE,

Код: plaintext
A.Bs.Where(x => x.Number == 5);

Таблицы в SQL студии создавайте через конструктор (в том числе и внешние ключи), а в VS таблицу создавайте путем перетаскивания таблицы из списка таблиц сервера на форму конструктора. Тогда у A будет ссылка на все B через поле Bs.
...
Рейтинг: 0 / 0
LINQ : 2 таблицы, связь 1 ко Многим
    #37121106
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее так:
Код: plaintext
db.As.Where(x => x.B.Number == 5);
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ : 2 таблицы, связь 1 ко Многим
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]