【问题标题】:Use GetProperties() in LINQ Where clause在 LINQ Where 子句中使用 GetProperties()
【发布时间】:2015-01-29 01:02:29
【问题描述】:

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

字符串字段A;

字符串字段B;

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

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

【问题讨论】:

  • 使用自定义属性装饰您的字段。在执行点,从反射before执行中获取属性,并确定谁是谁,并将正确的属性值传递给方法。希望这会有所帮助!

标签: c# linq entity-framework


【解决方案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()来得到你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多