Форум программистов, компьютерный форум, киберфорум
LINQ
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
 Аватар для 77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145

Переписать запрос SQL на LINQ

03.01.2013, 16:08. Показов 3063. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток!
помогите написать запрос на LINQ
вот он на MS SQL:
SQL
1
2
3
4
5
6
SELECT
p.Product_id, m.Manufacturer_name, pn.ProductName_name, p.Product_model
FROM 
Product p, Manufacturer m, ProductName pn
WHERE
p.Product_manufacturerId=m.Manufacturer_id AND p.Product_nameId=pn.ProductName_id
диаграмма БД:
Миниатюры
Переписать запрос SQL на LINQ  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2013, 16:08
Ответы с готовыми решениями:

Переписать SQL запрос в LINQ запрос
День добрый всем. Подскажите, пожалуйста, как можно преобразовать запрос: SELECT Price * (SELECT COUNT(SeatNumber) FROM...

SQL запрос в LINQ
Я не понимаю как перобразовать такой SQL-запрос для MS SQL SELECT * FROM sysobjects WHERE type = 'U' в запрос через LINQ. Может...

Перевести SQL-запрос в LINQ
Ребят помогите понять как будет такой запрос выглядить на linq: SELECT COUNT(*) FROM members WHERE member_id = (SELECT id FROM users...

2
 Аватар для 77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145
03.01.2013, 20:56  [ТС]
Лучший ответ Сообщение было отмечено 77Bender77 как решение

Решение

можно так, а как через лямбда-выражения?
C#
1
2
3
4
5
6
7
8
9
10
11
var qq0 = from p in context.Product
          from m in context.Manufacturer
          from pn in context.ProductName
          where (p.Product_manufacturerId == m.Manufacturer_id && p.Product_nameId == pn.ProductName_id)
          select new
          {
               p.Product_id,
               m.Manufacturer_name,
               pn.ProductName_name,
               p.Product_model
          };
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
05.01.2013, 18:31
Ну во первых у вас как то странно спроектирована база данных.
Зачем вам отдельная таблица для имен продуктов, зачем так усложнять структуру? При любом вашем ответе я могу просто напросто гарантировать, что отдельная таблица для имен продуктов - излишество.
Во вторых, отвыкайте уже от процедурного программирования, 21 век на носу, моветон процедурно мыслить.
Сделайте так что бы ваши объекты реалистично моделировали ваши сущности. Ниже я привел вам пример кода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
 
namespace example
{
    class Program
    {
        static void Main(string[] args)
        {
            // заглушка эмулирующая запрос к базе данных к таблице производителей
            IEnumerable<Manufactured> manucaturedListFromDB = new List<Manufactured> { 
                new Manufactured{
                    Id = 1,
                    Name = "The Coca-Cola Company"
                }
            };
 
            //заглушка эмулирующая запрос к базе данных к таблице продуктов
            IEnumerable<Product> productListFromDB = new List<Product> { 
                new Product{
                    Id = 1,
                    ManufacturedID = 1,
                    Name = "Coca-Cola"
                },
                new Product{
                    Id = 1,
                    ManufacturedID = 1,
                    Name = "Sprite"
                },
                new Product{
                    Id = 1,
                    ManufacturedID = 1,
                    Name = "Fanta"
                },
            
            };
 
            //запрос создающий полноценный продукт со связью с определенным производителем
            List<Product> realProductList = productListFromDB.Select(e => new Product {
                Id = e.Id,
                ManufacturedID = e.ManufacturedID,
                Name = e.Name,
                ProductManufactured = manucaturedListFromDB.FirstOrDefault(x=>e.ManufacturedID==x.Id)}).ToList(); // вот тут как бы должен быть тоже select new, но не получилось с такой колекцией это сделать
 
 
            foreach (var item in realProductList)
            {
                Console.WriteLine(string.Format("ID - {0} \nName - {1} \nInformation about Manufactured: \nManufaturedId - {2} \nManufacturedName - {3}", item.Id, item.Name, item.ProductManufactured.Id, item.ProductManufactured.Name));
                Console.WriteLine();
            }
        }
 
    }
 
 
    // Класс моделирующий продукт
    class Product
    {
        public int Id { get; set; }
        public int ManufacturedID { get; set; }
        public string Name { get; set; }
 
        public Manufactured ProductManufactured { get; set; }
    }
    //класс моделирующий производителя
    class Manufactured
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
Смысл кода таков - мы создаем класс который хранит данные полученный от базы в своих полях, но кроме того, каждый класс продукта содержит ссылку на своего производителя. Т.е. нам не нужно каждый раз делать запрос к бд и устанавливать личность производителя, у нас уже это все сделано как бы в виртуальной объектной модели.
Такая архитектура наиболее удобна, как мне кажется, при программировании ПО. А еще плюс ее в том, что она уже написана за вас в инструменте под названием Entity Framework, orm для работы с данными.
Если не знаете, советую ознакомится.
Иногда конечно же нужна большая гибкость от работы с базой данных, если там хранится громоздкая архитектура отчетов и предельно сложные и непонятные связи в таблицах, но для таких простых случаев я вам рекомендую пользоваться ORM. Ну или примерно в таком ключе мыслить, когда вы собираете данные из разных таблиц в вашей базе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2013, 18:31
Помогаю со студенческими работами здесь

Перевести SQL запрос в LINQ
Доброе время суток! Вот до этого времени не сталкивался с Join в LINQ. Помогите, пожалуйста, перевести SQL запрос в LINQ select...

Перевести запрос с SQL в LINQ
Доброго времени суток, требуется помощь в переводе запроса с SQL в LINQ, кто сможет помогите, буду Весьма благодарен. Запрос: select...

Запрос SQL записать в виде LINQ To Entities
Написал запрос на SQL: select * from Fuel_way inner Join Fuel on Fuel.id_fuel=Fuel_way.id_fuel where Fuel_way.id_column=2 and...

Как будет выглядеть SQL запрос в LINQ?
SELECT .OrdCount, .OrdInDate, Zak.ZakName FROM Zak INNER JOIN ON Zak.ZakCount = .ZakCount ORDER BY...

Есть хранимая процедура SQL. Надо сделать linq запрос
Есть хранимая процедура sql. Надо сделать linq запрос. Дело вроде бы простое ,но... ALTER PROCEDURE .(@marka varchar(50),@id_narush...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru