我可以在非实体成员字段上创建LINQ到实体查询

如何解决我可以在非实体成员字段上创建LINQ到实体查询

|| 我有一个实体类,已使用
partial class
语法进行了扩展,以具有某些派生属性。我想使用
IQueryable<T>
接口执行查询,该接口使用这些字段中的信息,但是我目前收到一个异常,指出   指定的类型成员\'Title \'为   LINQ to Entities不支持。   仅初始化器,实体成员和   实体导航属性是   支持的。 以下是相关的代码段。您可以假定Entity对象具有名为
Id
的String成员。
public partial class MyEntityObject
{
   public String Title { get { return MyStrings.ResourceManager.GetString(Id) ?? \"\"; } }
}

/**
 * Throws exception trying to sort on the \'Title\' field of a \'MyEntityObject\'
 */
public IEnumerable<T> Query<T>(String fieldName,int low,int high)
{
   // Get the ObjectContext<T> using a Repository pattern
   var query = context.GetRepository<T>()

   // Create an OrderBy clause based on the field by dynamically building an expression tree
   //  see http://stackoverflow.com/questions/4546463/help-with-linq-and-generics-using-getvalue-inside-a-query
   PropertyInfo propertyInfo = typeof(T).GetProperty(fieldName);

   ParameterExpression e = Expression.Parameter(typeof(T),\"e\");
   MemberExpression mexpr = Expression.MakeMemberAccess(e,propertyInfo);

   IQueryable<T> sortedQuery = query.OrderBy(Expression.Lambda<Func<T,Object>>(mexpr,e));
   return sortedQuery.Skip(low).Take(high - low + 1).AsEnumerable();
}
作为最后的选择,我总是可以在
Skip
Take
之前执行
AsEnumerable()
,但这将涉及从数据库中检索所有对象,即使可以通过sql完成选择。 也许最好的选择是使用反射来检查对象属性是否具有
DataMemberAttribute
,然后选择执行
query.OrderBy().Skip().Take().AsEnumerable()
还是
query.AsEnumerable().OrderBy().Skip().Take()
?     

解决方法

不,您不能,因为linq-to-entities查询只是将表达式树转换为SQL。要将树转换为SQL,将使用您的实体映射,并且由于
Title
不在映射中,因此它将引发异常。 在
Skip
Take
之前调用
AsEnumerable
听起来很糟糕,因为它将始终将整个数据表的内容传输到您的应用程序。这将非常慢,并且在大数据表的情况下也无济于事。 如果这是本地化问题,则您的数据库必须包含本地化的字符串才能使其生效。同时,如果只需要很少的记录就可以加载所有记录。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?