在 LINQ Where 子句中使用 GetProperties()

Use GetProperties() in LINQ Where clause

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

字符串字段A;

字符串字段B;

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

上切换

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

我建议使用这样的东西:

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() 来获取您想要的内容。