C# 使用泛型IQueryable源的LINQ where子句

C# 使用泛型IQueryable源的LINQ where子句,c#,linq,generics,C#,Linq,Generics,我正在尝试创建一个方法,该方法将过滤具有泛型类型的IQueryable数据源。我希望有一个搜索方法,我可以为我将要创建的每个表重用它。最好我也能把一个字段类型传给这个,这样我就可以缩小搜索范围,但我也不在乎它是否只是查看每个字段 到目前为止,我有: public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor) { foreach(var variabl

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

到目前为止,我有:

public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor)
{
    foreach(var variable in dataSource) 
    {
        dataSource = dataSource.Where(var.Contains(searchFor));
    }
}
公共静态IQueryable搜索(IQueryable数据源,字符串搜索)
{
foreach(数据源中的var变量)
{
dataSource=dataSource.Where(var.Contains(searchFor));
}
}

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

您不需要
来循环这里的
,这一行有错误:

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));
}
公共静态IQueryable搜索(IQueryable数据源,字符串搜索),其中T:IMyInterface
{
返回dataSource.Where(x=>x.Contains(searchFor));
}

这将只查看该数据源中的所有字段吗?如果有,是否有方法指定要搜索的字段?也许只是把它作为一个参数传入?@Pinball125您需要为每个要用于此函数的表类实现Contains。您可以根据需要指定包含方法的字段。LINQ Where正在调用它的整个集合上运行,并返回通过语句的项。这对大多数IQueryable实现不起作用。这更适合IEnumerableDo,因为您希望根据列的字符串名称搜索表中的一个或多个列。