Цикл foreach анонимного типа в C#
-
19-09-2019 - |
Вопрос
Мне нужно просмотреть свойства пользовательского типа объекта, который я получаю из базы данных, и показать только те столбцы, которые содержат данные.Это означает, что я не могу просто привязать список объектов к сетке данных.Я не хочу перебирать каждый объект и проверять, является ли столбец пустым/нулевым, и определять в пользовательском интерфейсе его отображение.Я думаю, что на моем бизнес-уровне, прежде чем отправить объект обратно, я бы отправил обратно IEnumerable только с теми столбцами, которые должны быть видимы.Поэтому я подумывал использовать для этого Linq to Object, но не уверен, что это будет очень красиво.
Кто-нибудь знает решение, которое я мог бы использовать без тонны операторов IF, которые я мог бы сделать, чтобы проверить большой объект (около 30 столбцов), чтобы определить, что следует показывать, а что нет.
Foreach (CustomerData customerdata in Customers)
{
if (!customerdata.address.Equals(""))
{
dgvCustomerData.Column["Address"].visible = false;
}
//Continue checking other data columns...
}
Я хочу избежать всего этого в пользовательском интерфейсе и во всех IF...У меня из-за этого пердеж в мозгу, может кто-нибудь мне помочь?
Спасибо
Решение
Взгляни на Библиотеки отражений .NET.Вы можете использовать отражение, чтобы получить все свойства объекта и просмотреть их, чтобы выяснить, являются ли они нулевыми или нет.Затем вы можете вернуть коллекцию объектов KeyValuePair, где Key = имя свойства, а Value = true/false.Затем вы должны использовать пары ключ-значение для установки видимости столбца...
Другие советы
Вы можете сделать следующее, чтобы немного упростить его
Action<T,string> del = (value,name) => {
if ( value.Equals("") ) {
dgvCustomerData.Column[name].Visible = false;
}
};
foreach ( var data in Customers ) {
del(data.address,"Address");
del(data.name, "Name");
...
}