मैंने 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>
1
nischalinn 2 सितंबर 2021, 13:04

4 जवाब

सबसे बढ़िया उत्तर

Enum प्रकार का उपयोग करने का उदाहरण।

enum मान द्वारा विवरण प्राप्त करने के लिए UserRankingEnum प्रकार और GetEnumDescription() विधि को परिभाषित करना:

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>
}
1
Jackdaw 2 सितंबर 2021, 14:00

एक संभावना है कि एक अलग व्यू मॉडल क्लास/पोको का उपयोग करें और इस पोको में डीबी इकाई को मैप करें:

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 "";
    }
}
1
JohnnyPrognose 2 सितंबर 2021, 10:11

मुझे लगता है कि आप ऐसा कुछ चाहते हैं

// 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>
}
1
Dharman 2 सितंबर 2021, 10:48

मैं शपथ ले सकता था कि आप उपयोग कर सकते हैं

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

और फिर

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

विवरण प्रदर्शित करेगा। वास्तव में कुछ कोड की जाँच की और इसे करना चाहिए। हालांकि यह इस बात पर निर्भर करता है कि आपको क्या चाहिए और बहुभाषी कारणों जैसी चीजों का मतलब यह हो सकता है कि आप किसी टेबल या किसी अन्य तरीके से इसका समर्थन करते हैं।

1
Richard Housham 3 सितंबर 2021, 15:59