使用通用lambda从数据库中读取记录

时间:2016-09-07 04:07:01

标签: generics lambda

TEntity temp = null;

foreach (TEntity item in _context.Set<TEntity>())
{
    if (keyPropertyInfo.GetValue(item).ToString() == primaryKey)
    {
        temp = item;
    }
}

我在DataAccessBase类中编写代码,并希望通过primaryKey获取TEntity,但效率不高,_context.Set将从表中获取所有记录。所以我试过了:

TEntity temp = _context.Set<TEntity>().Where(e => keyPropertyInfo.GetValue(e).ToString() == primaryKey).FirstOrDefault();

但它不起作用......任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

如果要通过主键查找实体,只需使用find方法:

public TEntity Get<TEntity>(string primaryKey) where TEntity : class
    {
        using (var _context = new MyDbContext())
        {
            return _context.Set<TEntity>().Find(primaryKey);
        }
    }

如果您需要通过其他属性找到它,可以将表达式发送到函数,如下所示:

public TEntity Get<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class
{
    using (var _context = new MyDbContext())
    {
        return _context.Set<TEntity>().Where(predicate).FirstOrDefault();
    }
}

并称之为:

repo.Get<MyModel>(x=>x.SomeProperty == someValue);