none
Реально ли на LINQ? RRS feed

  • Вопрос

  • запрос вида

    SELECT convert(datetime,convert(varchar(6),Data,112)+'01')
          ,sum([Value])
      FROM [dbo].[Schema]
      where Name = 'Имя' and (ParamName = 'Парам1' or ParamName = 'Парам2')
      group by (convert(varchar(6),Data,112))

    Или другое решение, чтобы получить сумму с группировкой по связке "год+месяц" и "год" из поля DateTime

Ответы

  • Попробуйте так

    var list = (from c in context.Schema
                      where c.Value > 0 && c.Name == "Имя"
                      where c.ParamName == "Парам1" || c.ParamName == "Парам2"
                      group c by new { month = c.Date.Month, year = c.Date.Year }
                        into g
                        select new { Date = g.Key, Value = g.Sum(c => c.Value) }).ToList();

    • Помечено в качестве ответа Mescher 5 июня 2012 г. 11:19
    5 июня 2012 г. 10:40
    Модератор

Все ответы

  • Используя LINQ можно очень многое сделать. Важно понять, что LINQ это понятие широкое, конкретно к чему нужен запрос, к какому источнику данных?
    Модератор
  • mssql 2008
    • Изменено Mescher 5 июня 2012 г. 8:58
  • var list = (from c in context.Schema
                            where c.Value > 0 && c.Name == "Имя"
                            where c.ParamName == "Парам1" || c.ParamName == "Парам2"
                            group c by c.Date.Year
                            into g
                            select new {Date = g.Key, Value = g.Sum(c => c.Value)}).ToList();

    С годом получается.. как бы теперь сделать связку год+месяц

    • Изменено Mescher 5 июня 2012 г. 10:03
  • Тогда нужна ORM. И можно будет делать запросы к БД, например LINQ to SQL или LINQ to Entities.
    Модератор
  • Да, не заметил код, точнее я отвечал когда Вы писали, наверное. А какую из ORM Вы используете?
    Модератор
  • Есть. LINQ to SQL. Вопрос именно как преобразовать данный в первом посте запрос, или другой способ группировки по "части" поля DateTime для вычисления суммы.
  • Напрямую SQL запрос в LINQ нельзя транслировать, этим занимается ORM. Можете привести код сущностных классов и схему базы, точнее ту часть которая тут используется?
    Модератор
  • Прошу прощения, модель ADO.NET EDM сгенерирована на основе представления из MSSQL. Представление имеет 4 поля:


    • Изменено Mescher 5 июня 2012 г. 9:45
  • Группировка по году или месяцу работает. Сумма вычисляется. Вопрос как сгруппировать по месяцу && году.. пока выкручусь вторым запросом и/или циклами..
    5 июня 2012 г. 10:35
  • Попробуйте так

    var list = (from c in context.Schema
                      where c.Value > 0 && c.Name == "Имя"
                      where c.ParamName == "Парам1" || c.ParamName == "Парам2"
                      group c by new { month = c.Date.Month, year = c.Date.Year }
                        into g
                        select new { Date = g.Key, Value = g.Sum(c => c.Value) }).ToList();

    • Помечено в качестве ответа Mescher 5 июня 2012 г. 11:19
    5 июня 2012 г. 10:40
    Модератор
  • О, великий Гуру, то что нужно)) Спасибо. Туплю пока еще с синтаксисом =)
    5 июня 2012 г. 11:20
  • До Гуру пока ещё как до луны. Да, и кстати, EDM это Entity Framework и язык LINQ to Entities. Хотя язык тут не подходит, лучше будет технология.
    5 июня 2012 г. 11:31
    Модератор