Форум программистов, компьютерный форум, киберфорум
Наши страницы
LINQ
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145
1

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

03.01.2013, 16:08. Просмотров 897. Ответов 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
диаграмма БД:
0
Миниатюры
Переписать запрос SQL на LINQ  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 16:08
Ответы с готовыми решениями:

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

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

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

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

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

2
77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145
03.01.2013, 20:56  [ТС] 2
Лучший ответ Сообщение было отмечено 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
135 / 137 / 18
Регистрация: 26.07.2010
Сообщений: 911
05.01.2013, 18:31 3
Ну во первых у вас как то странно спроектирована база данных.
Зачем вам отдельная таблица для имен продуктов, зачем так усложнять структуру? При любом вашем ответе я могу просто напросто гарантировать, что отдельная таблица для имен продуктов - излишество.
Во вторых, отвыкайте уже от процедурного программирования, 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 18:31

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

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

Есть хранимая процедура SQL. Надо сделать linq запрос
Есть хранимая процедура sql. Надо сделать linq запрос. Дело вроде бы простое ,но... ALTER...


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

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

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