I wanna ask question about EntityFrameWork/LINQ Here is my code. first, I wanna set Year from b.Datetime(data type is string) so, I use Convert.ToDateTime method, but the error is occurred.
IQueryable<AlarmCount> alarmCount = from b in fatalalarminfo
group b by new
{
GroupKey = b.Eqpid,
Year = Convert.ToDateTime(b.DateTime).Year
} into gbs
orderby gbs.Key.Year, gbs.Key.GroupKey
select new AlarmCount()
{
GroupKey = gbs.Key.GroupKey,
Period = new Period(EnumPeriodType.YEAR, gbs.Key.Year),
Amount = gbs.Count()
};
About error message, please refer to under image link. please help..!! thanks..!
CodePudding user response:
The issue is that it is an IQueryable.
This means that your linq query is being translated to SQL, and it cannot translate Convert.ToDateTime to sql.
You can use DateTime.ParseExact
, which does translate to SQL properly.
IQueryable<AlarmCount> alarmCount = from b in fatalalarminfo
group b by new
{
GroupKey = b.Eqpid,
Year = DateTime.ParseExact(b.DateTime, "<format>", CultureInfo.InvariantCulture).Year
} into gbs
orderby gbs.Key.Year, gbs.Key.GroupKey
select new AlarmCount()
{
GroupKey = gbs.Key.GroupKey,
Period = new Period(EnumPeriodType.YEAR, gbs.Key.Year),
Amount = gbs.Count()
};
Make sure to replace <format>
with the correct format.
CodePudding user response:
The IQureable<T>
does queries in database, you get this exception because there is no function mapped to Convert.ToDateTime
in your database. Try IEnumerable<T>
instead.