假设我有一个查询选择如此定义的类型:
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中的一个错误,或者我称错了......
有什么想法吗?
答案 0 :(得分:3)
Dynamic Linq大量使用Reflection。可能是一个问题,因为您的属性标记为internal
,方法<Type>.GetProperty
方法(将由Dynamic Linq库使用)不会监视internal
属性,除非BindingFlags
属性1}}将被改编。
尝试将它们标记为公开和您的班级。