Агрегация Sql в запрос Linq - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно преобразовать этот запрос в linq для сущностей.

SELECT CONVERT(varchar, ValueDateTime, 113) as MINUTE , avg(TagDataValue.TagValue) Value, TagName
FROM TagDataValue
WHERE ValueDateTime >= '6/03/2018' AND ValueDateTime < '6/06/2018' and TagName between ('Poll.Registers Block 0.310-TT-102_(6)') and ('Poll.Registers Block 0.310-TT-102_(7)')
GROUP BY CONVERT(varchar, ValueDateTime, 113) , TagName

Я пробовал пару запросов в linq к таким объектам, как это ..

var g = (from x in ObjEntities.TagDataValues
                             where x.ValueDateTime >= FromDate && x.ValueDateTime <= EndDate && MachineName.Contains(x.MachineName) && ServerName.Contains(x.ServerName) && Tags.Contains(x.TagName)

                             select new
                             {
                                 TagName = x.TagName,
                                 MachineName = x.MachineName,
                                 ServerName = x.ServerName,
                                 TagValue = x.TagValue,
                                 DtTime = x.ValueDateTime
                             }).ToList().Distinct().GroupBy(t => new
                             {
                                 Date = t.DtTime.AddSeconds(-t.DtTime.Second % 60).AddMinutes(-t.DtTime.Minute % 60), //System.Data.Entity.DbFunctions.AddHours(System.Data.Entity.DbFunctions.AddMinutes(t.DtTime, -t.DtTime.Minute), -t.DtTime.Hour),
                                 TagName = t.TagName.Distinct(),
                             }).Select(u => new
                             {
                                 DateTime = u.Key.Date,
                                 Tagname = u.Key.TagName,
                                 tagvalue = u.Average(cd => cd.TagValue)
                             }).ToList();

, но это не дает результата, есть идеи, как записать это в linq.

...