我的表格的列名类似于“ADDRESS”,“OLD_ADDRESS”,“CITY”,“OLD_CITY”,“STATE”,“OLD_STATE”.....等等。我正在使用实体框架查询提取此信息并将模型传递到ASP.NET MVC视图中。
我需要以表格格式显示此信息,看起来像这样
我需要比较旧字段和新字段,如果值有差异,请显示它。 做这样的事情的最佳方法是什么? 我可以通过循环遍历模型并比较if(item.ADDRESS == item.OLD_ADDRESS){....}来正常构建这个,但是这个特定的表有大约100列,我基本上写50“如果”条件。假设linq查询只返回一行。
我正在从遗留数据库中读取此信息,无法重新设计它。 提前感谢任何建议。
----------------------------- EDIT 1 ---------------- ------------ 这是我到目前为止所尝试的内容 -
@foreach (var BusRels in Model)
{
foreach (var busrel in BusRels.GetType().GetProperties())
{
if (busrel.Name.IndexOf("OLD") > -1) {
{
var fieldVal = busrel.GetValue(BusRels, null);
if ( fieldVal != null)
{
if (!fieldVal.ToString().Trim().IsEmpty())
{
<tr>
@{
//BusRels.GetType().GetProperties().Where(p => p.Name == fieldVal.
var displayName = busrel.GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), false)
.Cast<System.ComponentModel.DisplayNameAttribute>()
.FirstOrDefault().DisplayName;
}
<td>@displayName</td>
<td>@busrel.GetValue(BusRels, null)</td>
<td>???????</td>
</tr>
}
}
}
}
}
我想这里的问题是我似乎无法在旧值旁边显示“新”值。
答案 0 :(得分:2)
您可以使用LINQ获取要显示的值:
var matches = from BusRels in Model
from busrel in BusRels.GetType().GetProperties()
where busrel.Name.StartsWith("OLD")
let fieldVal = busrel.GetValue(BusRels, null)
where Convert.ToString(fieldVal).IsNullOrWhiteSpace()
let newval = BusRels.GetType()
.GetProperty(busrel.Name.Replace("OLD_", ""))
.GetValue(BusRels, null)
where newval.ToString().Trim() != fieldVal.ToString().Trim()
let displayName = busrel.GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), false)
.Cast<System.ComponentModel.DisplayNameAttribute>()
.FirstOrDefault().DisplayName
select new
{
DisplayName = displayName,
NewVal = newval,
OldVal = fieldVal
};
然后你只需循环并显示它们。
答案 1 :(得分:0)
@foreach (var BusRels in Model)
{
foreach (var busrel in BusRels.GetType().GetProperties())
{
if (busrel.Name.IndexOf("OLD") > -1)
{
{
var fieldVal = busrel.GetValue(BusRels, null);
if (fieldVal != null)
{
if (!fieldVal.ToString().Trim().IsEmpty())
{
var newval = BusRels.GetType().GetProperty(busrel.Name.Replace("OLD_", "")).GetValue(BusRels, null);
//BusRels.GetType().GetProperties().Where(p => p.Name == fieldVal.
var displayName = busrel.GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), false)
.Cast<System.ComponentModel.DisplayNameAttribute>()
.FirstOrDefault().DisplayName;
var oldval = busrel.GetValue(BusRels, null);
if (newval.ToString().Trim() != oldval.ToString().Trim())
{
<tr>
<td>@displayName</td>
<td>@newval</td>
<td>@oldval</td>
</tr>
}
}
}
}
}
}
}