在LINQ Where子句中使用GetProperties()

时间:2015-01-29 01:02:29

标签: c# linq entity-framework

我的问题的简单描述:假设我有两个类,Class1和Class 2,它们都实现了相同的接口,它具有以下字段:

字符串FieldA;

字符串FieldB;

由于遗留原因,Class1将FieldA用于特定目的,与Class2使用它的方式相反。实际上,Class2使用FieldB作为Class1使用FieldA的相同数据,反之亦然:字段在类上切换。

我需要能够在LINQ查询的Where子句的左侧指定哪个字段在传递给Entity Framework之前使用。如果我通过GetProperties()使用反射,它只是在评估之前将Func传递给数据库并且我得到一个异常。如何动态决定使用哪个字段?

1 个答案:

答案 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()来获得你想要的东西。