Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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# IQueryable<&燃气轮机;在Linq跳过/执行后正在丢失其初始类型_C#_Linq_Generics_Reflection - Fatal编程技术网

C# IQueryable<&燃气轮机;在Linq跳过/执行后正在丢失其初始类型

C# IQueryable<&燃气轮机;在Linq跳过/执行后正在丢失其初始类型,c#,linq,generics,reflection,C#,Linq,Generics,Reflection,有人能解释一下如何避免以下情况吗 我有一个名为data的变量,它是一个IQueryable。正如您在调用Skip/Take之前所看到的,运行库知道它的确切类型(IQueryable) 执行Skip/Take操作后,变量数据变为IQueryable 我希望它保留在执行Skip/Take之前的原始类型。在执行填充数据的方法之前,我不知道里面的确切类型。我知道之后,我可以得到我想要使用的类型,以便将跳过/收回转换为原始类型。我该怎么做 PS1:集合已由返回IQueryable PS2:在跳过/获取

有人能解释一下如何避免以下情况吗

我有一个名为data的变量,它是一个
IQueryable
。正如您在调用Skip/Take之前所看到的,运行库知道它的确切类型(
IQueryable

执行Skip/Take操作后,变量数据变为
IQueryable

我希望它保留在执行Skip/Take之前的原始类型。在执行填充数据的方法之前,我不知道里面的确切类型。我知道之后,我可以得到我想要使用的
类型
,以便将跳过/收回转换为原始类型。我该怎么做

PS1:集合已由返回
IQueryable


PS2:在跳过/获取之前,在执行
skip
take
之前,您的集合是
IQueryable
集合。您需要将集合强制转换为它的确切类型。

如果您的方法返回一个
IQueryable
,这就是代码所知道的全部内容。如果确定类型,可以根据需要使用
OfType()
Cast()
linq调用,使它们返回到您期望的类型,而不是代码期望的类型


编辑:在阅读了您在原始帖子上的更多评论后,听起来您的返回
IQueryable
的函数实际上应该变成一个返回
IQueryable
的通用函数,这样您一开始就不会有这个问题。这很快看起来越来越像一个XY问题。如果这个答案无效,我将删除它。

您在这里回答了自己的问题-这是因为您有一个
IQueryable
集合。您在运行时看到它的实际类型的原因——这只是调试器的帮助。Take和Skip是一种通用方法,所以您已经尝试过了。Take(…)?@VidmantasBlazevicius部分正确。如果Skip/Take没有执行,它的行为就像一个一直到方法末尾的函数。@SimplyGed我事先不知道它是一个Sales.Module。我知道只有在运行时,填充数据变量的方法才会执行。我不知道通过获得类型,我是否可以通过反射将Skip/Take转换为该类型。@Midas你这是什么意思?我事先不知道确切的类型。我可以通过反射得到它,所以我的问题是如何使用反射类型将跳过/获取结果转换回IQueryable?我已经编辑了我的问题。我不确定类型,直到填充“data”变量的方法被执行。然后我可以通过反射得到类型(type)。我想使用它来将跳过结果强制转换为该特定类型。通用将立即解决这个问题