Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq中的反射_C#_Linq_Reflection - Fatal编程技术网

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);