编辑从 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 或其他支持它的方式。
我已使用 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 或其他支持它的方式。