选择实体不同列的动态谓词

时间:2013-02-13 14:09:46

标签: linq entity-framework entity predicate

我需要根据页面模式用户选择显示网格中实体的全部或更少属性。例如,我有三种页面模式

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?])

1 个答案:

答案 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);