动态linq无法解析排序

时间:2013-04-16 07:57:30

标签: linq entity-framework dynamic-linq

假设我有一个查询选择如此定义的类型:

public class SomeObject
{
     public DateTime CreatedDate { get; set; }
}

private class MyType
{
    internal SomeObject Object1 { get; set; }
    internal SomeThing Object2 { get; set; }
    internal DateTime SomeDate { get; set; }   
}

var query =  from bla in context.Melp join ..... 
             select new MyType()
             {
                  Object1 = something,
                  Object2 = somethingelse,
                  SomeDate = bla.date
             }

现在我们使用DynamicLinq在结果集上添加动态的,用户定义的排序,如下所示:

query.OrderBy("SomeDate"); 

query.OrderBy("Object1.CreatedDate");

但是当我尝试订购时,例如," SomeDate"或" Object1.CreatedDate",我收到异常提示:

  

没有财产或字段' SomeDate'存在于类型' MyType'

现在,当我只是将方法语法中的排序添加到查询中时:

query = query.OrderBy(x => x.SomeDate)

query = query.OrderBy(x => x.Object1.CreatedDate)

一切正常,所以我认为这可能是DynamicLinq中的一个错误,或者我称错了......

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Dynamic Linq大量使用Reflection。可能是一个问题,因为您的属性标记为internal,方法<Type>.GetProperty方法(将由Dynamic Linq库使用)不会监视internal属性,除非BindingFlags属性1}}将被改编。

尝试将它们标记为公开和您的班级。