2013年8月8日 星期四

使用反射,取得要篩選排序的欄位或指定欄位的數值

#1 C#裡面,依照條件選擇要撈取或排序的欄位

public ActionResult Links(string idstring sort)
{
    var _db = new HappyMovieEntities();
     // 資料表的欄位
    string colIsName;
    string colOnName;
    SortBy sortBy = (SortBy)Enum.Parse(typeof(SortBy), sort); // 字串轉成Enum
    switch (sortBy)
    {
        case SortBy.Viewd:
            colIsName = "IsViewed";
            colOnName = "ViewedOn";
            break;
        case SortBy.Like:
            colIsName = "IsLiked";
            colOnName = "LikedOn";
            break;
        default:
            goto case SortBy.Viewd;
    }
    System.Reflection.PropertyInfo propIs = typeof(UserLinkVideo).GetProperty(colIsName);
    System.Reflection.PropertyInfo propOn = typeof(UserLinkVideo).GetProperty(colOnName);
    ViewBag.DateOnCol = colOnName// 給在View要反射欄位時使用,如果需要的話
    // 撈取 + 排序
    var links = _db.UserLinkVideo.Where(x => x.VideoId == id && ((bool)propIs.GetValue(xnull))).OrderByDescending(x => propOn.GetValue(xnull));
    return View(links);
}

#2 View裡面,依照條件取得巢狀迴圈的值

@{
    // 要使用的欄位,這裡的【ModelTypeName】為傳入該View的Model型別名稱
    System.Reflection.PropertyInfo prop = typeof(HappyMovie.Model.UserLinkVideo).GetProperty(ViewBag.DateOnCol);
    string displayText}
@foreach (var item in Model)
{
    displayText = item.GetType().GetProperty(prop.Name).GetValue(itemnull).ToString();
}

沒有留言: