我有这个LINQ查询:
hdms = from t in db.HOLIDAY
join t1 in db.EMPLOYEE on t.UPDATED_BY equals t1.EMP_CODE
where
t.HOLIDAY_NAME == searchtext &&
t.DOH.Value.Year == 2016
orderby
t.DOH
select new HOLIDAYDETAILS
{
HOLIDAY_NAME = t.HOLIDAY_NAME,
DOH = t.DOH,
EMP_NAME = t1.EMP_NAME
};
执行此操作时,会出现以下错误:
'string'不包含'Value'的定义,也没有扩展方法'Value'接受类型'string'的第一个参数(你是否缺少using指令或汇编引用?)
错误来自Value
中的t.DOH.Value.Year = 2016
。
此处t.DOH
的类型为string
,值为2016-04-14
我也试过这个:
hdms = from t in db.HOLIDAY
where
DateTime.ParseExact(t.DOH, "yyyy-MM-dd", CultureInfo.InvariantCulture).Year == DateTime.Now.Year
orderby
t.DOH
select new HOLIDAYDETAILS
{
DOH = t.DOH
};
现在出现了这个错误:
LINQ to Entities无法识别方法'System.DateTime ParseExact(System.String,System.String,System.IFormatProvider)'方法,并且此方法无法转换为商店表达式。
在LINQ中还有其他方法可以将字符串转换为日期类型吗?
答案 0 :(得分:1)
您可以从字符串中解析DateTime,如:
DateTime.ParseExact(t.DOH, "yyyy-MM-dd", CultureInfo.InvariantCulture)
然后你可以使用[DateTimeVariable]获得年份值。年份
答案 1 :(得分:1)
由于DOH
是字符串类型,您可以使用StartsWith
检查字符串是否以2016开头。
where
t.HOLIDAY_NAME == searchtext &&
t.DOH.StartsWith("2016")
更好的选择是将DOH的数据类型更改为DateTime
/ DatetTime?
,以便在处理日期和时间值时获得更好的支持。然后你可以保留你的查询。