繼承new()這個就可以進行泛型實例化了。本來還想着直接傳一個進去(ActivityPlayRequest request,T model, ActivityDbContext dbContext)
但是由於list引用的是地址指針,所以到最后List中的所有數據都是model最后一次的改變結果,比較坑。
所以查了一下泛型實例化的寫法。當然這種寫法要求該對象存在無參的構造函數才行。
是從這里參考的:Author ※森林小居※
http://www.cnblogs.com/Slxj/archive/2011/10/13/2210443.html
public List<T> GetAbstractUserDTO<T>(ActivityPlayRequest request,ActivityDbContext dbContext) where T : AbstractUserDTO,new() { //temp用來存放一個值,因為T泛型不能創建 var merchant = dbContext.Find<Merchant>(request.MerchantID); if (merchant == null) { return null; } var result = new List<T>(); var weixinUserList = dbContext.WeixinUsers.ToList(); var merchantWeixinUserList = dbContext.MerchantWeixinUsers.ToList(); if (!string.IsNullOrEmpty(request.Keyword)) { request.Keyword = request.Keyword.Trim(); } //參加用戶的唯一表 #region 存儲值 var playList = dbContext.ActivityScenePlayRecords.Where(u => u.ActivitySceneID == request.ActivitySceneID).ToList(); foreach (var item in playList) { var temp = new T(); temp.MerchantWeixinUserID = item.MerchantWeixinUserID; temp.WeixinUserID = item.WeixinUserID; #region 真實姓名聯系方式,不通過weixinuser表了,而是使用ActivityScenePlayRecord表進行獲取 temp.RealName = item.RealName; temp.TelPhone = item.Telphone; #endregion var merchantWeixinUser = merchantWeixinUserList.Where(u => u.ID == item.MerchantWeixinUserID).FirstOrDefault(); temp.NickName = merchantWeixinUser.NickName; temp.OpenId = merchantWeixinUser.OpenId; temp.ImageUrl = merchantWeixinUser.HeadImageUrl; #region 根據keyword判斷是否要添加進入 if (!string.IsNullOrEmpty(request.Keyword)) { if (!string.IsNullOrEmpty(temp.RealName) && temp.RealName.Contains(request.Keyword)) { result.Add(temp); } else if (!string.IsNullOrEmpty(temp.TelPhone) && temp.TelPhone.Contains(request.Keyword)) { result.Add(temp); } else if (!string.IsNullOrEmpty(temp.NickName) && temp.NickName.Contains(request.Keyword)) { result.Add(temp); } } else { result.Add(temp); } #endregion } #endregion return result; }