2

是否有人知道.NET 库可以针对对象图提供良好的模式匹配(认为对象而不是文本的正则表达式)?

我能想到的最接近的东西是Ometa,但 .NET 版本似乎垂死了。

编辑

这个问题与我正在研究的一个想法有关,该想法更多地处于研发阶段。有问题的应用程序接受规范并将它们传递到存储库,然后使用实体框架将它们(使用它们的 lambda)转换为 SQL。

作为一种通用技术,这可以正常工作。但是,对于某些查询,结果非常慢。这个想法是在存储库中有一些优化规则,检查传入的规范是否与优化的手写查询之一匹配。

例如,假设我们正在使用如下模型的规范:

 class Person
 {
     public string FirstName { get; set; }
     public string LastName { get; set; }
     List<PhoneNumber> PhoneNumbers { get; set; }
 }

 class PhoneNumber
 {
     public string Number { get; set; }
     public PhoneNumberType PhoneNumberType { get; set; }
 }

 enum PhoneNumberType
 {
      Cell,
      Landline
 }

然后我们的基本规格是:

 interface ISpecification<T>
 {
     Expression<Func<T,bool>> Predicate { get; }
 }

 class GetPersonByPhoneNumberTypeSpecification : ISpecification<Person>
 {
      public PhoneNumberType PhoneNumberType { get; set; }

      public Expression<Func<Person,bool>> Predicate
      {
            return a => a.PhoneNumbers.Any(b => b.PhoneNumberType == PhoneNumberType);
      }
 }

 class GetPersonRequest
 {
      ISpecification Specification { get; set; }
 }

在存储库中,我们可能有一个手写查询来选择与他们相关联的特定电话号码类型并希望在查询匹配时使用它的人。

整点无需编写大量代码来检查整个可组合规范就可以说,给定的请求具有给定的“形状”。想象一下这样的对象匹配语言。

另一种思考方式可能是对对象而不是 XML 的 XPath 查询。

4

1 回答 1

1

我不相信这不能仅仅通过 linq 来实现。

但是你可以实现解释器模式

于 2012-11-05T19:01:35.963 回答