创建通用LINQ函数以返回传入的类型

Oma*_*him 2 c# linq generics

两个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)

这个问题是重复.我想要一个通用函数来做到这一点,但我不知道该怎么做

Bac*_*cks 6

  1. 介绍新界面:

    interface IThisfieldSupported
    {
        string Thisfield {get;set;}
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置限制:

    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)
  3. 用不同的类调用它,但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)