LINQ where子句使用Generic IQueryable source

时间:2017-05-16 19:04:38

标签: c# linq generics

我正在尝试创建一个方法,该方法将使用泛型类型过滤IQueryable数据源。我希望有一个搜索方法,我可以为我将要创建的每个表重用它。我希望能够将一个字段类型传递给它,以便我可以缩小搜索范围,但也不关心它是否只是查看每个字段。

到目前为止,我有这个:

public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor)
{
    foreach(var variable in dataSource) 
    {
        dataSource = dataSource.Where(var.Contains(searchFor));
    }
}

我不知道这是否真的可行,但它会省去大量的编码,因为我将不得不为我将要查看的每个新表实现一种新的搜索方法。

1 个答案:

答案 0 :(得分:1)

这里你不需要for循环,并且在这一行中有错误:

dataSource = dataSource.Where(var.Contains(searchFor));

您可以通过以下方式定义界面:

public interface IMyInterface
{
    bool Contains(string searchFor);
}

现在你可以用以下方式编写你的函数:

public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor) where T:IMyInterface
{

    return dataSource.Where(x=>x.Contains(searchFor));
}