部分类属性无法通过绑定到GridView的LINQ查询访问

SIv*_*gvi 3 .net linq asp.net entity-framework

我已经为实体框架生成的部分添加了一个部分类.我想添加一个可以绑定到GridView的计算字段.但是,当我尝试访问新属性时,我收到一条错误消息,指出这是对Entity Framework的限制.

有没有工作要做到这一点?

Jos*_*osh 8

如果没有看到您的代码,就无法正确诊断您的问题.但是,我有预感......

创建一个局部类并向其添加一个计算属性根本不是问题.将相同的属性绑定到GridView也不是问题,因为只要属性是公共的并且访问它本身不会引发异常,GridView就不关心.

但是......您可能正在尝试在查询中使用该属性.实体框架和其他所有ORM都会在这个问题上呕吐,因为没有将该属性转换为基础数据存储(可能是SQL Server).因此,当EF尝试构造查询数据库所必需的SQL时,它会吓坏并说 "我不知道如何将此属性转换为有效的SQL"

确保您没有在查询中使用该属性,您应该没问题.

更新:

如果您希望实际上能够在结果集中使用计算列,那么您有两个基本选项:

1.)使用计算列在数据库中创建一个视图,并将您的实体绑定到该视图而不是原始基础表.您的财产现在将合法地绑定到可以查询的内容.

2.)确保执行查询并首先返回完整(未过滤)的结果集,然后使用常规的LINQ to Object来获得所需的内容.像这样的东西:

var query = from o in Context.Orders
            where o.Price > 100
            select o;

var orders = from order in query.ToList() // Force query to execute
             where order.ComputedColumn == 42
             select order;
Run Code Online (Sandbox Code Playgroud)

显然,这比选项1效率低,但根据原始查询可能不会很糟糕.