将Iqueryable作为参数发送到函数

时间:2010-03-15 07:29:37

标签: c#

我将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);

他的工作成功

现在我想在循环中使用item(循环变量)的属性

我该怎么做?

由于 IFA

1 个答案:

答案 0 :(得分: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);
        // ...
    }      
}

如果您可以提供有关您尝试做的更多信息,我们可以为您提供更多帮助。