在 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() 来获取您想要的内容。
我的问题的简单描述:假设我有两个 类、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() 来获取您想要的内容。