EF獲取一個或者多個字段


有時候直接查詢出一個實體,比較浪費性能,對於字段比較少的表來說差異不大,但是如果一個表有幾十個字段,你只要取出一個字段或者幾個字段,而取出整個實體,性能就會有差異了。

  /// <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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM