C#匿名类型foreach循环

时间:2009-12-10 18:13:10

标签: c# forms c#-3.0 anonymous-types business-logic-layer

我需要遍历我从数据库返回的自定义对象类型的属性,并仅显示包含数据的列。 这意味着我不能简单地将对象列表绑定到datagrid。 我不想遍历每个对象并查看列是否为空/ null并在UI中确定以显示它。 在我发送对象之前,我正在考虑的是在我的业务层中,我将发送一个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...
}

我希望在UI和所有IF中避免所有这些... 我有一个大脑放屁这个人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:4)

您可以执行以下操作来简化它

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");
  ...
}

答案 1 :(得分:2)

看看the .NET Reflection Libraries。您可以使用反射来获取所有对象的属性,并循环遍历它们以查明它们是否为空。然后,您可以返回KeyValuePair对象的集合,其中Key =属性名称,Value = true / false。然后,您可以使用keyvaluepairs设置列可见性...