我有一个实体框架的EDMX生成的类具有DOB(出生日期)属性。
public partial class Contact : EntityBase
{
public Contact()
{
}
public Nullable<System.DateTime> DOB { get; set; }
}
我创建了一个LINQ表达式,用于使用字符串值搜索记录&#34; 2015-02-21&#34;反对DOB。
Expression<Func<Contact, bool>> cntExpression = p => Convert.ToString(p.DOB).ToLower().Trim().Contains("2015-02-21");
我使用业务逻辑类的方法使用上面的LINQ表达式过滤记录。
IQueryable<Contact> qryContact = _cntMgr.GetFiltered(cntExpression);
但是你可以看到DOB是一个可以为空的属性,所以当下面的代码开始循环遍历上面的IQueryable实例中的记录时,它会抛出错误。
foreach (var contact in qryContact)
{
if (contact!=null)
{
// some code gets execute here..
}
}
我得到的错误是:
LINQ to Entities does not recognize the method 'System.String ToString(System.Object)' method, and this method cannot be translated into a store expression.
我已经知道Linq to Entities不支持System.String ToString,但我需要解决方案或解决此问题的方法。
请帮我解决这个问题。
提前致谢。
答案 0 :(得分:1)
检查空值
Expression<Func<Contact, bool>> cntExpression = p =>
p.DOB.HasValue
&& Convert.ToString(p.DOB.Value).ToLower().Trim().Contains("2015-02-21");
改进只是比较DateTime
的日期部分。
var want = new DateTime(2015, 2, 21);
Expression<Func<Contact, bool>> cntExpression = p =>
p.DOB.HasValue && want == p.DOB.Value.Date;
答案 1 :(得分:0)
我认为您不需要转换,您可以将代码更改为:
recur_disciplinas
答案 2 :(得分:0)
将表达式替换为此将起作用!
Expression<Func<Contact, bool>> cntExpression = p => p.DOB.HasValue && p.DOB.Value.Year == Convert.ToInt32("2015") && p.DOB.Value.Month == Convert.ToInt32("02") && p.DOB.Value.Month == Convert.ToInt32("21");
Lemme知道你是否还有任何进一步的问题。