繼承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;
}

