C# Linq中的反射
这行代码:C# Linq中的反射,c#,linq,reflection,C#,Linq,Reflection,这行代码: db.Set<T>().Max(d => d.GetType().GetProperty("DateTimePropertyName").GetValue(d)) 我该如何让它工作?您试图运行c代码,而这些c代码本应以某种方式转换为SQL,但却无法运行 是一个很好的入门指南 您有两个选择: 1.从数据库中获取数据,并使用LINQ to Objects对其进行检查-可能是最简单的方法,但不是最好的方法,因为有些查询可能返回大型集合 2.试着找到一个更好的方法来做你正
db.Set<T>().Max(d => d.GetType().GetProperty("DateTimePropertyName").GetValue(d))
我该如何让它工作?您试图运行c代码,而这些c代码本应以某种方式转换为SQL,但却无法运行
是一个很好的入门指南
您有两个选择:
1.从数据库中获取数据,并使用LINQ to Objects对其进行检查-可能是最简单的方法,但不是最好的方法,因为有些查询可能返回大型集合
2.试着找到一个更好的方法来做你正在做的事情。为什么要运行此反射代码?目的是什么?DateTimePropertyName是非公共的吗?如果是,为什么?否则,类似的方法应该会起作用:
db.Set<T>().Max(d => d.DateTimePropertyName);
db.Set().Max(d=>d.DateTimePropertyName);
默认情况下,它假定您传递了表达式,但您需要传递的是Func
:
Func f=p=>p.GetType().GetProperty(“DateTimePropertyName”).GetValue(p);
_context.Set().Max(f);
它来自IEnumerable,因此如果您的表很大,它将影响性能我认为它不会工作,因为您查询的是一个数据库,它不支持GetType()…计算在服务器端执行是否重要?基本上,您要求服务器计算LinqToEntities无法与服务器通信的内容。这是一个泛型类,我需要在服务器端进行计算。您应该删除“==something”,并可能在1中给出一些代码。否则,答案很好+1@MarkusJohnsson你是对的我做了错事
db.Set<T>().Max(d => d.DateTimePropertyName);
Func<T, object> f = p => p.GetType().GetProperty("DateTimePropertyName").GetValue(p);
_context.Set<T>().Max(f);