IQueryable的<>在Linq Skip / Take

时间:2018-03-13 16:32:29

标签: c# linq generics reflection

有人可以解释如何避免以下情况吗?

我有一个名为数据的变量IQueryable<>。正如您在调用Skip / Take之前所看到的那样,运行时知道它的确切类型(IQueryable<...Module>)。

enter image description here

执行Skip / Take后,变量数据变为IQueryable< object>

enter image description here

我希望它在执行Skip / Take之前保留原始类型。我不知道&lt;&gt;里面的确切类型在执行填充数据变量的方法之前。之后我就知道了,我可以获得我想要使用的Type以便将Skip / Take转换为原始类型。我怎样才能做到这一点?

PS1:该集合已由返回IQueryable< object>

的方法返回

PS2:直到跳过/取走它的行为就像IQueryable< ...module>

2 个答案:

答案 0 :(得分:1)

在执行IQueryable<Object>Skip之前,您的收藏集为Take。您需要将您的收藏品投射到确切的类型。

答案 1 :(得分:1)

如果您的方法返回IQueryable<object>,那就是所有代码都知道的。如果您确定类型,则可以使用OfType<Module>()Cast<Module>() linq调用,以使其返回到您期望的类型,而不是代码所期望的类型。

编辑:在原帖上阅读你的评论后,几乎听起来你的函数返回IQueryable<object>实际上应该变成一个返回IQueryable<T>的泛型函数,这样你就赢了首先有这个问题。这很快就会成为一个XY问题。如果此答案无效,我将删除它。