C# 如何从IQueryable获取数据?

C# 如何从IQueryable获取数据?,c#,C#,我调用了一个返回IQueryable的方法。例如 var x=acDAL.GetData(); 它通过连接三个表返回数据。例如,我想从这个IQueryable获取数据 var x = acDAL.GetData(); foreach(var item in x) { int id=item.Id; } 我如何才能做到这一点?您可以举一个例子: var x = acDAL.GetData(); foreach(var a in x) { int id=a.Id; } 但

我调用了一个返回IQueryable的方法。例如 var x=acDAL.GetData();
它通过连接三个表返回数据。例如,我想从这个IQueryable获取数据

var x = acDAL.GetData(); 
foreach(var item in x) 
{ 
    int id=item.Id; 
}
我如何才能做到这一点?

您可以举一个例子:

var x = acDAL.GetData();
foreach(var a in x) {
    int id=a.Id;
}
但大多数if已经起作用了,特别是因为IQueryable实现了IEnumerable。问题是.Id

您有两种选择:

  • 了解T,并将其转换为T中的IQueryable
  • 使用动态
后者只涉及将示例中的
var
更改为
dynamic

var x = acDAL.GetData();
foreach(dynamic a in x) {
    int id=a.Id;
}
前者涉及了解对象-请尝试a.GetType()查看它是什么。然后:

var x = acDAL.GetData();
foreach(SomeType a in x) {
    int id=a.Id;
}
或者:

var x = (IQueryable<SomeType>)acDAL.GetData();
foreach(var a in x) {
    int id=a.Id;
}
var x=(IQueryable)acDAL.GetData();
foreach(x中的变量a){
int id=a.id;
}

查看它取决于您的
IQueryable中的数据类型。你能提供更多关于
GetData
方法内部发生了什么的信息吗?它通过连接三个表返回数据。我想从这个IQueryable获取数据,就像var x=acDAL.GetData()一样;foreach(x中的var a){int id=a.id;}您想对数据做什么?它通过连接三个表返回数据。我想从这个IQueryable获取数据,就像var x=acDAL.GetData()一样;foreach(var a in x){int id=a.id;}感谢Marc为您回复动态解决方案,它给我的错误是“object”不包含“id”的定义。而a.GetType()是+a.GetType(){f_uAnonymousTypeB3
23[System.Int32,System.Int32,System.Nullable
1[System.Decimal],System.Nullable
1[System.Int32],System.Nullable
1[System.Int32],System.Nullable
1[System.Int32],System.Nullable
1[System.Boolean],System.String,System.Nullable
1[System.Int32],}dynamic{System.RuntimeType}@user如果在投影中实际有一个Id,那么动态方法应该可以正常工作。匿名类型如果暴露在其上下文之外,则很难处理。GetType().GetProperty(“Id”)返回什么?Null?还是非Null?a.GetType().GetProperty(“Id”)它返回{Int32 Id}