搜索各种表的通用方法

时间:2017-11-07 15:26:46

标签: c# entity-framework linq

我是C#和DB的新手, 我有一个方法,通过DB中的代码查找员工。我想使检查通用,以便它可以用于检查各种表中的员工代码(用户将提供代码和表)。我怎样才能做到这一点?

这是我的代码:

public static bool checkForEmployeeCode(string SSN)
{
    MyEntities ETC = new MyEntities();

    var checkSsn = (from Applicant in ETC.Applicants1
                    where Applicant.SSN == SSN.Trim()
                    select Applicant).FirstOrDefault();
    if (checkSsn != null)
    {....

我有答案请解释。

1 个答案:

答案 0 :(得分:1)

您可以在Where()之上使用扩展方法重新使用IQueryable<YouEntityType>过滤器。

要允许在不同类型的实体上调用此扩展方法,每个实体都必须实现一个公共接口,公开SSN属性:

public interface IHasSSN
{
    string SSN { get; set; }
}

public class Applicant : IHasSSN
{
    public string SSN { get; set; }
    // Other properties
}

public class OtherTable : IHasSSN
{
    public string SSN { get; set; }
    // Other properties
}

public static Queryable<T> WithSSN<T>(this IQueryable<T> queryable, string ssn) where T : IHasSSN
{
    return queryable.Where(e => e.SSN == ssn.Trim());
}

然后可以在实现WithSSN()接口的实体的任何DbSetIQueryable实体上调用IHasSSN方法。您的代码现在看起来像:

public static bool checkForEmployeeCode(string SSN)
{
    MyEntities ETC = new MyEntities();

    var checkSsn = ETC.Applicants1
        .WithSSN(ssn)
        .FirstOrDefault();

    if (checkSsn != null)
    {....
}