C# Sql聚合到Linq查询
我需要将此查询转换为linq to实体C# Sql聚合到Linq查询,c#,sql-server,linq,sql-to-linq-conversion,C#,Sql Server,Linq,Sql To Linq Conversion,我需要将此查询转换为linq to实体 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 Bloc
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
选择转换(varchar,ValueDateTime,113)为分钟,平均值(TagDataValue.TagValue)值,标记名
来自TagDataValue
其中ValueDateTime>='6/03/2018'和ValueDateTime<'6/06/2018',标记名介于('Poll.Registers Block 0.310-TT-102_u6')和('Poll.Registers Block 0.310-TT-102_7')之间
按转换分组(varchar,ValueDateTime,113),标记名
我已经在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();
var g=(从objenties.TagDataValues中的x开始)
其中x.ValueDateTime>=FromDate&&x.ValueDateTime新建
{
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(),
}).选择(u=>new
{
日期时间=u.Key.Date,
标记名=u.Key.Tagname,
tagvalue=u.Average(cd=>cd.tagvalue)
}).ToList();
但是它没有给出结果,你知道如何将其写入linq。为什么
Distinct
,你的模型实现了IEquatable
,因为你没有通过平等比较者
,你最好调用Distinct
,在克劳塞尝试过之后,再调用平等比较者,但我也不想这样(然后是分组问题,检查生成了哪些值,因为您正在添加时间(秒/分钟),您希望如何获得任何分组数据。第一点仍然是Distinct是否会导致任何值,如果是,则根据我的理解,为要分组的数据更正分组值t.DtTime.AddSeconds(-t.DtTime.Second%60).AddMinutes(-t.DtTime.Minute%60)
将与DtTime
的值不匹配,也是t.TagName
要调用Distinct的集合,您在标记名上是否有足够的数据?
typeno,基本上,这是我需要实现的,如果您能帮助的话,它将非常有用。