LINQ的类似功能

时间:2010-06-06 18:36:04

标签: java php linq

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

7 个答案:

答案 0 :(得分:7)

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

但是我不知道任何语言可以在任何地方接近LINQ可以干净简洁地完成的任何事情。请记住,LINQ不仅仅是一种操作内存结构的方法 - LINQ有许多提供者共享类似的接口:

  • LINQ to Objects
  • LINQ to XML
  • LINQ to SQL
  • 等。

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

答案 1 :(得分:1)

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

示例:查找名为Fred的所有与丹麦人说话的与会者。

<强> C#:

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

<强> Scala的:

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

答案 2 :(得分:1)

我真的很惊讶没有人谈过它,但是我使用了来自LINQ to PHPMartin Balliauw端口,它的工作方式很好。它工作得很好,你可以做这样的事情:

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

我甚至写了一篇关于它的small blog post

答案 3 :(得分:1)

这是有效的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]"
  }
}

答案 4 :(得分:0)

虽然基本的LINQ功能,如Selectmap)和Wherefilter)在几乎所有当代编程语言中都存在,但是“在运行中”构建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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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