繁体   English   中英

通过计算字段过滤实体框架数据的问题

[英]Issue with Filtering Entity Framework data by Calculated Fields

这是我的问题的简化EF Scenerio:

public partial class MyClass
{
    public int ID { get; set; }
    public byte Month { get; set; }
    public int Year { get; set; }

    public DateTime CalculatedDate
    {
        get
        {
            return new DateTime(this.Year, this.Month, 1);
        }
    }
}

我正在使用存储库模式来访问这些对象,这也实现了一个返回IEnumrable的Where(predicate)方法,就像LINQ一样。 它被这样使用:

var myClasses = myClassRepo.Where(mc=> mc.ID > 10);

这可以很好地工作,并返回包含所有字段的预期对象,包括CalculatedDate。 但是,当我尝试将计算字段用作谓词时,如下所示:

var myClasses = myClassRepo.Where(mc=> mc.CalculatedDate == DateTime.Now);

我收到一个错误:

你调用的对象是空的。

我知道我可以通过检索第一组结果然后通过计算字段进一步对其进行过滤来“解决”。 但我试图了解为什么会这样,以及可以解决此问题的方法。

实体框架会尝试将LINQ转换为SQL,因此尝试将MyClass.CalculatedDate方法转换为SQL可以识别的内容时会遇到麻烦。 您可以通过在LINQ之前的位置添加.AsEnumerable()调用来解决此问题,如下所示:

var myClasses = myClassRepo.AsEnumerable().Where(mc => mc.CalculatedDate == DateTime.Now);

我认为这是因为EF不支持查询自定义属性,因为它们无法转换为数据库列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM