Мне нужно преобразовать этот запрос в 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.
Я попробовал, но удаление Distinct у меня тоже не сработало .. :(
Затем после этого будет проблема с группировкой, проверьте, какие значения генерируются, поскольку вы добавляете время (секунды / минуты), как вы ожидаете получить какие-либо данные группировки. Первым остается вопрос, приводит ли Distinct к какому-либо значению, если да, то правильные значения группировки для данных, которые будут сгруппированы.
Насколько я понимаю, t.DtTime.AddSeconds(-t.DtTime.Second % 60).AddMinutes(-t.DtTime.Minute % 60) не будет соответствовать значению DtTime также является t.TagName коллекцией для вызова Distinct, есть ли у вас IEquatable для типа TagName
нет, в основном, это то, чего мне нужно достичь, если вы можете помочь, это будет очень полезно. stackoverflow.com/questions/50700293/…
Это запрос диапазона DateTime, все, что вам нужно, это DateTime.ParseExact с правильным форматом, и он даст ожидаемый результат, я не вижу здесь объема группировки





Почему
Distinct, реализует ли ваша модельIEquatable, поскольку вы не передаетеEqualityComparer, вам лучше вызватьDistinct, используя EqualityComparer после предложения Where