2010-03-15 31 views
1

我发送IQueryable的一个功能就是下面发送的IQueryable作为参数传递给函数

void Method<T>(ref IQueryable<T> qu) 
{ 
    foreach (T item in qu) 
    { 

    } 
} 

,因为我需要从TIS功能使用一些不同势的IQueryable 并调用此方法

Patient_BusinessEntity Be = new Patient_BusinessEntity(); 
IQueryable<PatientDataAccess> Query = Be.GetAllRow(); 
Method<PatientDataAccess> (ref Query); 

他工作成功

现在我想要从项目(循环变量)的属性中使用循环

如何才能做到这一点?

感谢 IFA

回答

3

首先,没有任何理由,使之成为ref参数?如果要返回新值,则使用该方法的返回值几乎总是比使用ref参数更好。

现在,这是一个通用的方法 - 你怎么知道你想在循环中访问哪个属性?如果是固定的,你知道,T将永远是东西一些亚型,其宣称的财产,你可以再补充一个约束:

void Method<T>(IQueryable<T> query) where T : SomeType 
{ 
    foreach (T item in query) 
    { 
     int size = item.Size; // Size declared in SomeType 
     // ... 
    } 
} 

如果你只是在执行时知道它 - 或者,如果它不是由任何声明常见的基本类型 - 你将不得不使用反射来得到它...或者你可能把它传递到方法:

voidMethod<T>(IQueryable<T> query, Func<T, int> sizeSelector) 
{ 
    foreach (T item in query) 
    { 
     int size = sizeSelector(item); 
     // ... 
    }  
} 

如果你可以给你想要做什么的更多信息,我们可能能够帮助您更多。

相关问题