我需要根据页面模式用户选择显示网格中实体的全部或更少属性。例如,我有三种页面模式
Minimal (will show 8 properties of an entity in the grid)
Standard (will show 12 properties of an entity in the grid)
Extended (will show 15 properties of an entity in the grid)
如何使Select谓词动态化以包含基于用户页面模式的指定的实体列数。假设我有Entity公司有15个属性我想做这样的事情
dbContext.Companies.Select([predicate for choosing different no of columns?])
答案 0 :(得分:3)
您无法使用Predicates解决此问题,因为它们始终返回bool
。
您需要的是一个函数表达式,它将Company
个对象作为参数并返回object
。具体而言,您需要Expression<Func<Company, object>>
。
这是您定义三种选择的方法:
Expression<Func<Company, object>> minimal = e => new { e.Prop1, ..., e.Prop8 };
Expression<Func<Company, object>> standard = e => new { e.Prop1, ..., e.Prop12 };
Expression<Func<Company, object>> extended = e => new { e.Prop1, ..., e.Prop15 };
然后根据需要使用它们:
dbContext.Companies.Select(minimal);
// or
dbContext.Companies.Select(standard);
// or
dbContext.Companies.Select(extended);