powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ
3 сообщений из 3, страница 1 из 1
Помогите с запросом на LINQ
    #39275856
CyberForce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Имеется обычный SQL запрос. Можно ли как-то его оформить в LINQ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT        service.id, service.short_name, service.long_name, service.code, service.service_type_id, service.is_deleted, service_price.price
FROM            service INNER JOIN
                         service_price ON service.id = service_price.service_id
WHERE        (service.is_deleted = 0) AND (service_price.date =
                             (SELECT        MAX(date) AS Expr1
                               FROM            service_price AS S
                               WHERE        (service_id = service_price.service_id) AND (date <= @date))) AND (service.long_name <> '')
ORDER BY service.code



Сделал так, но так не пойдет...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IQueryable<service> service = context.service;
            if (!includeDeleted)
            {
                service = service.Where(x => (!x.is_deleted.HasValue || !x.is_deleted.Value));
            }

foreach (service srv in service)
            {
                service_price sp = srv.service_price.OrderByDescending(r => r.date).FirstOrDefault(r => r.date <= date);
                if (sp != null)
                    srv.price = sp.price;
            }
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #39276946
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberForce,
Попробуй так.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
DateTime dt = DateTime.Now;
            var res = from s in context.service
                join sp in context.service_price on s.id equals sp.service_id
                let max =
                    context.service_price.Where(x => x.service_id == sp.service_id && x.date < dt && s.long_name != "")
                        .Max(x => x.date)
                where s.is_deleted == 0 && sp.date == max
                select new {s.id, s.short_name, s.long_name, s.code, s.service_type_id, s.is_deleted, sp.price};
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #39277047
CyberForce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, все работает.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public IEnumerable<service> GetServices(Entities context, DateTime dt)
        {
            var res = from s in context.service
                      join sp in context.service_price on s.id equals sp.service_id
                      let max =
                          context.service_price.Where(x => x.service_id == sp.service_id && x.date <= dt && s.long_name != "")
                              .Max(x => x.date)
                      where (!s.is_deleted.HasValue || !s.is_deleted.Value) && sp.date == max
                      select new { s.id, s.short_name, s.long_name, s.code, s.service_type_id, s.is_deleted, sp.price };

            return res.ToList()
                .Select(x => new service()
                {
                    code = x.code,
                    id = x.id,
                    is_deleted = x.is_deleted,
                    long_name = x.long_name,
                    price = x.price,
                    service_type_id = x.service_type_id,
                    short_name = x.short_name
                });
        }
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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