两个LINQ方法做同样的事情,但采取和返回不同的类型
private IQueryable<Type1>FilterBySomething(IQueryable<Type1> results)
{
if (ThisField!= null)
{
results = results.Where(x => x.Thisfield == ThisField.Value);
}
return results;
}
private IQueryable<Type2>FilterBySomething(IQueryable<Type2> results)
{
if (ThisField!= null)
{
results = results.Where(x => x.Thisfield == ThisField.Value);
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
这个问题是重复.我想要一个通用函数来做到这一点,但我不知道该怎么做
介绍新界面:
interface IThisfieldSupported
{
string Thisfield {get;set;}
}
Run Code Online (Sandbox Code Playgroud)设置限制:
private IQueryable<Type1> FilterBySomething<Type1>(IQueryable<Type1> results) where Type1 : class, IThisfieldSupported
{
if (ThisField!= null)
{
results = results.Where(x => x.Thisfield == ThisField.Value);
}
return results;
}
Run Code Online (Sandbox Code Playgroud)用不同的类调用它,但IThisfieldSupported在这个类中实现:
class Data : IThisfieldSupported
{
string Thisfield { get;set; }
int Id { get;set; }
}
...
var data = new Data[10];
var result = FilterBySomething(data);
Run Code Online (Sandbox Code Playgroud)