Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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# 非泛型IQueryable枚举问题_C#_Linq_Dynamic_Iqueryable - Fatal编程技术网

C# 非泛型IQueryable枚举问题

C# 非泛型IQueryable枚举问题,c#,linq,dynamic,iqueryable,C#,Linq,Dynamic,Iqueryable,我使用dynamiclinq()运行下面的查询,该查询返回一个IQueryable。对于这个同样是IEnumerable的结果,我可以运行Count(),但是没有ToList()来获取值。我可以使用foreach枚举它们,但无法在不进行反射的情况下访问结果匿名类型中的各个字段。这是唯一的办法吗?谢谢 var query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10

我使用dynamiclinq()运行下面的查询,该查询返回一个IQueryable。对于这个同样是IEnumerable的结果,我可以运行Count(),但是没有ToList()来获取值。我可以使用foreach枚举它们,但无法在不进行反射的情况下访问结果匿名类型中的各个字段。这是唯一的办法吗?谢谢

var query =
                db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
                OrderBy("CompanyName").
                Select("New(CompanyName as Name, Phone)");

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }
尝试强制转换,但出现错误,无法将“DynamicClass1”类型的对象强制转换为“Test”类型

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

}

如果IEnumerable不是泛型的,那么您应该强制转换而不是使用反射。

当查询在运行时解析时,您不能期望动态对象的类型在编译时解析。这就是动态linq的全部内容:它允许您以编译时检查为代价执行动态查询

您必须使用反射来访问动态类型的属性,至少在C#4之前是这样