我正在尝试为我的 EF 应用程序编写一些动态 linq 表达式。
我有一个表示类型的枚举:
public class MyEntity {
public int? One { get; set; }
public int? Two { get; set; }
public int? Three { get; set; }
// other fields..
}
public enum MyType {
One,
Two,
Three
}
public static Expression<Func<MyEntity, int?>> GetItem(MyType myType) {
switch(myType) {
case One: return (e) => e.One;
case Two: return (e) => e.Two;
case Three: return (e) => e.Three;
default: throw new NotImplementedException();
}
}
根据类型,我想对它执行查询。例如,我想查看我的类型列是否等于某个值:
public static Expression<Func<MyEntity, int?>> EqualsValue(MyType myType, int value) {
return Expression.Equal(GetItem(myType), Expression.Constant(value));
}
这给了我一个编译器错误,它不能从 BinaryExpression 转换为 Expression>。有一个更好的方法吗?
更新:
我想在 EF 中使用它,例如:ctx.MyEntities.Where(EqualsValue(myType, value)).Where(u => u.UserID == userID)
所以返回类型必须是Expression<Func<MyEntity, int?>>
.. 我需要它才能用于 Linq to SQL 以及 EF DataService。