我正在尝试创建一个方法,该方法将使用泛型类型过滤IQueryable数据源。我希望有一个搜索方法,我可以为我将要创建的每个表重用它。我希望能够将一个字段类型传递给它,以便我可以缩小搜索范围,但也不关心它是否只是查看每个字段。
到目前为止,我有这个:
public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor)
{
foreach(var variable in dataSource)
{
dataSource = dataSource.Where(var.Contains(searchFor));
}
}
我不知道这是否真的可行,但它会省去大量的编码,因为我将不得不为我将要查看的每个新表实现一种新的搜索方法。
答案 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));
}