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

时间:2010-08-30 12:33:32

标签: .net asp.net linq entity-framework

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

是否有任何工作要做到这一点?

1 个答案:

答案 0 :(得分: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;

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