在JAVA,PHP等不同语言中是否有类似于LINQ(.NET)的功能?
答案 0 :(得分:7)
有许多语言具有语法或库函数,用于以大多数功能方式操作对象序列。例如,Python具有lambda函数,列表推导,生成器和itertools
模块。
但是我不知道任何语言可以在任何地方接近LINQ可以干净简洁地完成的任何事情。请记住,LINQ不仅仅是一种操作内存结构的方法 - LINQ有许多提供者共享类似的接口:
微软在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 PHP的Martin 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功能,如Select
(map
)和Where
(filter
)在几乎所有当代编程语言中都存在,但是“在运行中”构建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。