有時候直接查詢出一個實體,比較浪費性能,對於字段比較少的表來說差異不大,但是如果一個表有幾十個字段,你只要取出一個字段或者幾個字段,而取出整個實體,性能就會有差異了。
/// <summary> /// 直接獲取特定一個或者多個字段的值 /// 多個字段需要聲明Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <param name="scalar"></param> /// <returns></returns> public T GetScalar<T>(Expression<Func<TEntity, bool>> predicate,Expression<Func<TEntity, T>> scalar) { if (predicate == null) { return dbContext.Set<TEntity>().AsNoTracking().Select(scalar).FirstOrDefault(); } else { return dbContext.Set<TEntity>().AsNoTracking().Where(predicate).Select(scalar).FirstOrDefault(); } }
單個字段就比較簡單了
var s= testDal.GetScalar<string>(m=>m.Code== "02018",m=>m.Name);
多個字段需要定義Model
var s= testDal.GetScalar<StoreM>(m=>m.Code== "02018",m=>new StM { Name1= m.Name, Code=m.Code });
是不是很方便?
但是如果我們覺得定時Model比較麻煩,沒關系 我們可以采用dynamic
var s= testDal.GetScalar<dynamic>(m=>m.Code== "02018",m=>new { m.Name,m.Code });
var a = s.Name;