使用实体框架获取数据的通用函数

时间:2015-09-24 04:42:17

标签: c# entity-framework generics

我正在尝试使用Entity Framework创建一个通用函数来从数据库中获取数据。我传递id作为检索的关键。为此,我写了以下函数

public T Get<T>(object id) where T : class
{
    T item = null;

    using (var context = MyContext())
    {
        item = context.Set<T>().Find(id);
    }

    return item;
}

该功能正常运行。但是,如果我没有将主键作为过滤器传递,我该如何修改此函数来获取数据?

1 个答案:

答案 0 :(得分:11)

您可以传递谓词表达式并使用.FirstOrDefault()

public T Get<T>(Expression<Func<T, bool>> predicate)
    where T : class
{
    T item = null;
    using (var context = MyContext())
    {
        item = context.Set<T>().FirstOrDefault(predicate);
    }
    return item;
}

var customer = context.Get<Customer>(x => x.Name == "Bob");