2010-06-06 78 views
2

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

+1

你问了类似的语法或库功能? – Gabe 2010-06-06 18:38:03

+0

http://stackoverflow.com/questions/346721/linq-for-java-tool重复 – Bozho 2010-06-06 18:40:36

+0

@加布库功能 – kzh 2010-06-06 18:42:31

回答

7

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

但是我不知道任何语言都可以在LINQ可以干净简洁地完成任何事情的地方找到任何地方。请记住,LINQ不仅仅是一个在内存中的结构上操作方式 - LINQ有相似的接口许多供应商:

  • LINQ到对象
  • 的LINQ to XML
  • LINQ到SQL
  • 等等。

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

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 
0

确实存在,但php是一种编程语言,而不是像.net框架之类的框架。所以如果你想使用功能,你应该下载一些库,orms或框架来获得更高的效率。我不认为这个PHP有这个强大的功能,这可能是一个相当于LINQ。

+0

LINQ本身不是ASP.NET的一部分。它是.NET Framework的一部分。 ASP.NET也是.NET Framework的一部分。 .NET Framework中的类型可以用于任何.NET语言。 VB.NET和C#都是.NET语言,它们恰好具有使.NET Framework的LINQ功能更易于使用的语言语法。 – 2010-06-06 19:03:53

+0

感谢您的纠正 – 2010-06-06 19:10:04

1

Scala提供了与LINQ相似的功能。

示例:查找所有与会者姓名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 
1

我真的很惊讶,没有人谈论过它,但我使用了LINQ to PHP的端口从Martin Balliauw,这工作挺好。它的工作原理有点不好,你可以做这样的事情:

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

我甚至写了small blog post了。

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]" 
    } 
}