【问题标题】:Similar features of LINQ [closed]LINQ的类似功能[关闭]
【发布时间】:2011-02-28 10:44:52
【问题描述】:

在 JAVA、PHP 等不同语言中是否有类似 LINQ (.NET) 的功能?

【问题讨论】:

标签: java php linq


【解决方案1】:

有许多语言具有语法或库函数,用于以主要功能方式对对象序列进行操作。例如,Python 有 lambda 函数、列表推导、生成器和 itertools 模块。

但是,我不知道有任何语言可以像 LINQ 一样简洁明了地完成所有操作。请记住,LINQ 不仅仅是一种对内存结构进行操作的方法 - LINQ 有许多共享类似接口的提供程序:

  • LINQ to Objects
  • LINQ to XML
  • LINQ to SQL
  • 等等..

微软在 LINQ 方面做得很好。我相信其他一些语言会从 LINQ 的成功中汲取灵感,并考虑在不久的将来如何添加类似的功能。

【讨论】:

    【解决方案2】:

    Scala 具有提供与 LINQ 类似功能的 for-comprehensions。

    示例:查找姓名为 Fred 且会说丹麦语的所有与会者。

    C#:

    var xs = 
      from att in attendees
      where att.name == "Fred"
      from lang in att.spokenLanguages
      where lang == "Danish"
      select att;
    

    斯卡拉:

    val xs = for {
      att <- attendees
      if att.name == "Fred"
      lang <- att.spokenLanguages
      if lang == "Danish"
    } yield att
    

    【讨论】:

      【解决方案3】:

      我真的很惊讶没有人谈论它,但我使用了来自Martin Balliauw 的LINQ to PHP 端口,效果不错。它工作得很好,你可以这样做:

      $result = from('$employee')
          ->in( $employeeTable )
          ->where('$employee => strlen($employee->Name) < 5')
          ->orderBy('$employee->Name')
          ->select('$employee');
      

      我什至写了一个small blog post关于它。

      【讨论】:

        【解决方案4】:

        这是有效的 Java,但需要这个库:https://github.com/nicholas22/jpropel-light

        import java.util.Arrays;
        import lombok.ExtensionMethod;
        import lombok.val;
        import propel.core.utils.Linq;
        import static propel.core.functional.predicates.Predicates.*;
        import static propel.core.functional.projections.Projections.*;
        
        @ExtensionMethod({Linq.class})
        public class Main
        {
        
          /**
           * @param args
           */
          public static void main(String[] args)
          {
            val names = new String[] { "john", "james", "john", "eddie" }.where(startsWith("j")).distinct();    
            System.out.println(Arrays.toString(names));
        
            // prints "[john, james]"
          }
        }
        

        【讨论】:

          【解决方案5】:

          虽然基本的 LINQ 功能,如 Select (map) 和 Where (filter) 几乎存在于所有当代编程语言中,但“即时”构建 SQL 并且懒惰地构建 SQL 是 ORM 的工作

          例如,Django ORM 允许您使用这样的语法进行查询:

          Posts.objects.filter(user=peter).annotate(comment_count=Count('comment')).order_by('comment_count')

          在 LINQ 中类似于(不太确定):

          from p in posts
          where p.user == peter
          select new { post = p, comment_count = comments.Where(c => c.post == p).Count() }
          order by comment_count
          

          【讨论】:

            【解决方案6】:

            当然有,但是 php 是一种编程语言,而不是像 .net 框架这样的框架。所以如果你想使用特性,你应该下载一些库、orms或框架以获得更高的效率。我不认为php有那么强大的功能,可能相当于linq。

            【讨论】:

            • LINQ 本身不是 ASP.NET 的一部分。它是 .NET 框架的一部分。 ASP.NET 也是 .NET 框架的一部分。 .NET Framework 中的类型可用于任何 .NET 语言。 VB.NET 和 C# 都是 .NET 语言,它们恰好具有使 .NET Framework 的 LINQ 功能更易于使用的语言语法。
            【解决方案7】:

            http://code.google.com/p/phpreboot/ 部分使用类似 PHP 的语言实现 LINQ。

            【讨论】:

              猜你喜欢
              • 2011-08-02
              • 1970-01-01
              • 1970-01-01
              • 2012-05-24
              • 1970-01-01
              • 2012-11-11
              • 1970-01-01
              • 2011-01-01
              • 2016-10-12
              相关资源
              最近更新 更多