如何在onfly上创建表达式

时间:2012-09-10 13:09:44

标签: c# linq

我有一个示例查询类,其中包含查询参数作为其属性。此类用于WCF通信,在服务器端生成适当的过滤器表达式。

示例代码在哪里。

internal interface IExpressionBuilder<T>
{
   Func<T, bool> Build();
}

这是示例实现

[DataContract]
public class PersonQuery : IExpressionBuilder<Person>
{
    [DataMember]
    public string IdCardNumber;
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string LastName { get; set; }
    [DataMember]
    public DateTime? BirthDate { get; set; }

    #region Implementation of IExpressionBuilder<Data>

    public Func<Person, bool> Build()
    {
        throw new NotImplementedException();
    }

    #endregion
}

用法:

publi List<Person> GetPersonByQuery(PersonQuery query)
{
    (using context = new SampleContext())
    {
        return List<Person> foundPersons = context.people.where(query.build());
    }
}

你可以看到这个想法非常简单但我的问题是如果设置了PersonQuery属性,如果它们被设置,当调用build()方法时,如何根据

动态包含它们

1 个答案:

答案 0 :(得分:0)

你看过Dynamic Linq了吗?它似乎非常适合您的问题。

如果你想使用函数和构建表达式树,this库提供了一个很好的,流畅的语法来创建表达式树。