【发布时间】:2013-04-24 00:18:54
【问题描述】:
我目前有一个用于访问对象属性的属性访问器的 LINQ 表达式。我现在需要构建一个 LINQ 表达式,该表达式将对谓词求值,以查看属性访问器的结果是否包含在列表中。
我已经看到,在大多数情况下,这种事情是使用 Expression 上的静态方法完成的,但是没有 Contains 或 In 可用作 Expression 上的静态方法,所以我不确定如何继续。
// A data object
internal class PersonDAL
{
public int Age ( get; set; }
}
// A business object
public class Person
{
private PersonDAL root { get; set; }
public static Expression<Func<PersonDAL, int>> AgeExpression
{
get
{
return (root) => (root.Age);
}
}
}
现在我希望能够检查 AgeExpression 的值是否包含在年龄列表中。通常这类似于编写一个表达式来查看值列表是否包含我要检查的值,但我不知道如何将表达式的结果作为要搜索的值输入。
为了澄清一点,我试图弄清楚如何获取具有所有 Persons 的可查询对象,并仅获取未知表达式基于另一个表达式的值评估为 true 的 Persons。在我的示例案例中,未知访问器表达式正在查看一个人的年龄,它需要能够评估它是否包含在另一个可接受的年龄列表中。
【问题讨论】:
-
LINQ to Entities? LINQ 到对象? LINQ to XML?
-
@dtb - 目前底层 DAL 是 Codesmith PLINQO 模板的旧版本。我在 BOL 对象中手动构建了属性访问器,这些访问器指向 PLINQO 生成的 DAL 对象。
-
如果没有动态表达式,您将如何进行查询?
-
AgeExpression 是静态的将不起作用。它需要访问实例变量。它应该是非静态的,还是我还缺少其他东西?
-
@Shlomo - 这是一个访问器表达式。它是一个输入 PersonDal 的特定实例并评估该实例的属性的函数。
标签: c# linq linq-expressions