Вы можете использовать отражение для получения свойств и их значений. Проверьте следующие фрагменты кода.
Модели:
public class Quote
{
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string HomeValue { get; set; }
}
public class QuotesModel
{
public List<Dictionary<string, object>> Quotes { get; set; }
public string[] SelectedProps { get; set; } = AllProps;
public static readonly string[] AllProps;
static QuotesModel()
{
AllProps = typeof(Quote).GetProperties().Select(pi => pi.Name).ToArray();
}
}
Контроллер / Действие :
...
[HttpGet]
public IActionResult Quotes([FromQuery] IList<string> props = null)
{
if (props == null || !props.Any())
{
props = QuotesModel.AllProps;
}
var quotes = FetchQuotes();
//--apply properties filter
var selectedPropInfo = typeof(Quote).GetProperties().Where(p => props.Contains(p.Name)).ToList();
var filteredQuotes = quotes
.Select(quote => selectedPropInfo.ToDictionary(pi => pi.Name, pi => pi.GetValue(quote)))
.ToList();
var model = new QuotesModel
{
Quotes = filteredQuotes,
SelectedProps = props.ToArray()
};
return View(model);
}
...
Для отображения отфильтрованных объектов:
<table>
<thead>
<tr>
@foreach (var prop in Model.SelectedProps)
{
@:<td>@prop</td>
}
</tr>
</thead>
<tbody>
@foreach (var q in Model.Quotes)
{
<tr>
@foreach (var prop in Model.SelectedProps)
{
<td>@q[prop]</td>
}
</tr>
}
</tbody>
</table>