我的问题的简单描述:假设我有两个类,Class1和Class 2,它们都实现了相同的接口,它具有以下字段:
字符串FieldA;
字符串FieldB;
由于遗留原因,Class1将FieldA用于特定目的,与Class2使用它的方式相反。实际上,Class2使用FieldB作为Class1使用FieldA的相同数据,反之亦然:字段在类上切换。
我需要能够在LINQ查询的Where子句的左侧指定哪个字段在传递给Entity Framework之前使用。如果我通过GetProperties()使用反射,它只是在评估之前将Func传递给数据库并且我得到一个异常。如何动态决定使用哪个字段?
答案 0 :(得分:1)
我建议使用这样的东西:
var query = from obj in yourCollection
let left = obj is ClassA ? obj.Field1 : obj.Field2
where left == /* your condition goes here */
select /* anything you want to select */;
如果上面的方法不够,你也可以在let子句中调用GetProperties()来获得你想要的东西。