C# 如何从列表中选择动态列
我想从列表中动态选择列,如下所示。那么最好的办法是什么呢C# 如何从列表中选择动态列,c#,linq,C#,Linq,我想从列表中动态选择列,如下所示。那么最好的办法是什么呢 //a objects list List<DashBoard> dashboardlist = (List<DashBoard>)objList; string strColumns = "RecDate,ModifiedDate"; objList = (from obj in dashboardlist select new { strColumns }).ToList(); /////////////
//a objects list
List<DashBoard> dashboardlist = (List<DashBoard>)objList;
string strColumns = "RecDate,ModifiedDate";
objList = (from obj in dashboardlist select new { strColumns }).ToList();
/////////////
好的,忘了对象列表吧,比如说我有一个数据库表,表中有列ID、名称、年龄、性别等。然后我有列列表要显示,列列表会根据条件而改变。所以我列出了一些人;和列表列模板;现在我想根据模板选择列 我假设列列表可能来自外部资源,并且会发生变化,我建议: 通过反射,您可以生成对应于每个列的FieldInfo列表,然后循环列表中的每个项目和每个FieldInfo,并调用数据对象上的GetValue。以下是解决方案:
看看动态Linq:假设您只有两个模板。可以为每个模板创建一个方法,该方法只返回所需的列。大概是这样的:
// method for template 1 - returns only 3 columns/properties
private DashBoard CreateDashBoardXxxxxxx(DashBoard item)
{
return new DashBoard {
Property1 = item.Property1,
Property4 = item.Property2,
Property3 = item.Property3
};
}
// method for template 2 - returns N columns/properties
private DashBoard CreateDashBoardYyyyyyyy(DashBoard item)
{
return new DashBoard {
Property1 = item.Property1,
Property4 = item.Property2,
// Other properties
// .....
PropertyN = item.PropertyN
};
}
List<DashBoard> dashboardlist = (List<DashBoard>)objList;
// using template 1
var list = dashboardlist.Select(CreateDashBoardXxxxxxx);
// using template 2
var list2 = dashboardlist.Select(CreateDashBoardYyyyyyyy);
然后,您可以使用以下方法:
// method for template 1 - returns only 3 columns/properties
private DashBoard CreateDashBoardXxxxxxx(DashBoard item)
{
return new DashBoard {
Property1 = item.Property1,
Property4 = item.Property2,
Property3 = item.Property3
};
}
// method for template 2 - returns N columns/properties
private DashBoard CreateDashBoardYyyyyyyy(DashBoard item)
{
return new DashBoard {
Property1 = item.Property1,
Property4 = item.Property2,
// Other properties
// .....
PropertyN = item.PropertyN
};
}
List<DashBoard> dashboardlist = (List<DashBoard>)objList;
// using template 1
var list = dashboardlist.Select(CreateDashBoardXxxxxxx);
// using template 2
var list2 = dashboardlist.Select(CreateDashBoardYyyyyyyy);
您只需要编写一些代码来决定应该使用哪个模板
我希望这有帮助 谢谢你为我的问题提供了一些想法。花了几个小时 我找到了谷歌
您计划如何使用objList?我希望您认识到,访问属性不会像静态定义列select new{obj.RecDate,obj.ModifiedDate}时那样简单,因为您选择的列是new{obj.RecDate,obj.ModifiedDate},因此C可以为您创建匿名类型。只需继续使用完整的DashBoard对象并根据需要仅读取字符串指定的属性可能会更容易?我倾向于同意Tim S-坚持使用Dashboard对象有什么理由需要返回匿名对象,或者需要返回一个初始化了不同属性的列表吗?好吧,忘了对象列表吧,我说我有一个数据库表,它有列ID、名称、年龄、性别、,等等,然后我有一个列列表要显示,列列表会根据条件而改变。所以我列出了一些人;并列出LTE列;现在我想根据模板选择列。