Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 获取iquiryable的计数<;T>;_C# 4.0_Iqueryable - Fatal编程技术网

C# 4.0 获取iquiryable的计数<;T>;

C# 4.0 获取iquiryable的计数<;T>;,c#-4.0,iqueryable,C# 4.0,Iqueryable,假设我们有以下集合 IEnumerable<int> list = new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 10 }; var query = list.Skip(5).Take(4); SomeMethod(query.AsQueryable()); . . . public void SomeMethod(IQueryable<T> query) { var co

假设我们有以下集合

 IEnumerable<int> list = new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 10 };
 var query = list.Skip(5).Take(4);
 SomeMethod(query.AsQueryable()); 
 .
 .
 .
 public void SomeMethod(IQueryable<T> query)
 {
      var collectionCount = ?????  // count should be 10 not 4.
      ...
 }
IEnumerable list=新列表{11,12,13,14,15,16,17,18,19,10};
var query=list.Skip(5)、Take(4);
SomeMethod(query.AsQueryable());
.
.
.
公共方法(IQueryable查询)
{
var collectionCount=???//计数应为10而不是4。
...
}
如何在SomeMethod中获取查询的原始集合计数(无需应用Skip和Take子查询)


谢谢。

list.Count应该返回原始列表的计数

您无法获取信息(除非可能通过执行一些核心反射操作)。它已经不存在了。就像你想从这样的东西中提取原始计数:

var list = new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 10 };
SomeMethod(list[3]);

public void SomeMethod(int number)
{
  var collectionCount = ?????  // count should be 10
  ...
}

我想获取SomeMethod(IQueryable)方法中的计数。如果我错了,请更正我,但据我所知,当您移动IQueryable时,您将移动提供程序和表达式。因此,我认为有可能对该提供程序执行不同的查询。@Mohammadreza-在您的示例中,您处理
IEnumerable
,只有最终的可枚举项转换为
IQueryable
。查询表是从包含[16,17,18,19]的IEnumerable创建的,没有原始列表的痕迹。感谢您的澄清。在我的项目中,我使用IQueryable,因为我实际上使用EF4处理数据库。上面的代码只是我的一个例子,我不知道你刚才说了什么。那么,这仍然可能吗?@Mohammadreza-amendedI得到的答案是错误的“此方法支持LINQ到实体基础结构,不打算直接从代码中使用。”在DyanmicInvoke点。我用的是EF4。以前有人经历过吗?
public int CountOriginal<T>(IQueryable<T> query)
{
    var ex = query.Expression;
    while (ex.NodeType == ExpressionType.Call)
    {
        var call = (MethodCallExpression)ex;

        if (call.Method.Name != "Skip" && call.Method.Name != "Take") break;

        ex = call.Arguments[0];
    }
    var enumerable = Expression.Lambda(ex).Compile().DynamicInvoke(null) as IEnumerable<T>;
    if (enumerable == null) throw new NotImplementedException();
    return enumerable.Count();
}