编辑从 LINQ 获得的数据结果

Edit data result got from LINQ

我已使用 LINQ 查询从数据库中检索数据。

var data = (from z in db.BlogPostTbl
                        where z.PostId == id
                        select z).ToList();
                    

在这个结果中,我有一个属性名称 user_rankings。此字段的值在数据库中为 [1,2,3],但我必须显示为 good if 3, better if 2 or best if 1。我该怎么做?

<td><b>User Ranking:</b> @Html.DisplayFor(modelItem => item.user_rankings) </td>

一种可能是使用单独的视图模型 class / poco 并将 db 实体映射到此 poco:

var data = (from z in db.BlogPostTbl
            where z.PostId == id
            select new BlogPostViewModel()
            {
                Ranking = GetRankingDescription(z.user_rankings)
            }).ToList();

public class BlogPostViewModel
{
    public string Ranking { get; set; }
}

private static string GetRankingDescription(int ranking)
{
    switch (ranking)
    {
        case 1:
        return "best";
        case 2: 
        return"better";
        case 3
        return"good";
        default
        return "";
    }
}

我想你想要这样的东西

// inside the razor page 
@foreach (var item in Model)
                            {
                                string rank_ = "";
                                switch(item.user_rankings)
                                {
                                    case "1":
                                        ward_ = "BEST";
                                        break;
                                    case "2":
                                        ward_ = "BETTER";
                                        break;
                                    case "3":
                                        ward_ = "GOOD";
                                        break;                                    
                                }
<td><b>User Ranking:</b> @rank_ </td>
}

使用 Enum 类型的示例。

定义UserRankingEnum类型和GetEnumDescription()方法以通过enum值获取描述:

using System.ComponentModel;
using System.Linq;
using System.Reflection;

namespace WebApp.Models
{
    public class BlogPost
    {
        public int PostId { get; set; }
        public int user_rankings { get; set; }
    }

    public enum UserRankingEnum
    {
        [Description("BEST")]
        Best = 1,
        [Description("BETTER")]
        Better = 2,
        [Description("GOOD")]
        Good = 3        
    }

    public static class EnumExtension
    {
        public static string GetEnumDescription(this UserRankingEnum value)
        {
            if (value.GetType().GetField(value.ToString()) is FieldInfo fi)
            {
                if (fi.GetCustomAttributes(typeof(DescriptionAttribute), false) is DescriptionAttribute[] attributes && attributes.Any())
                {
                    return attributes.First().Description;
                }
            }
            return value.ToString();
        }
    }
}

相应的观点:

@using WebApp.Models
@model IList<WebApp.Models.BlogPost>

@foreach (var item in Model)
{
    <div>
        <b>User Ranking: </b> 
        @{ var description = ((UserRankingEnum)item.user_rankings).GetEnumDescription(); @Html.DisplayFor(m => description) }
    </div>
}

我发誓你可以使用

public enum UserRankingEnum
    {
        [Description("BEST")]
        Best = 1,
        [Description("BETTER")]
        Better = 2,
        [Description("GOOD")]
        Good = 3        
    }

然后

@Html.DisplayFor(modelItem => item.user_rankings)

将显示说明。实际上检查了一些代码,它应该可以。 虽然这取决于您的需要,但诸如多语言原因可能意味着您倾向于 table 或其他支持它的方式。