Apa yang setara dengan Java untuk LINQ? [Tutup]

820

Apa yang setara dengan Java untuk LINQ?

Ahmed Atia
sumber
4
Itu tampaknya LINQ to SQL.
SLaks
8
Periksa ini: github.com/nicholas22/jpropel-light, contoh nyata: String baru [] {"james", "john", "john", "john", "eddie"} .where (beginWith ("j")). ToList ().berbeda();
NT_
1
Java ppl masih menggunakan banyak pernyataan dan loop foreach yang dapat diselesaikan oleh Linq ...
om471987
1
Juga untuk Scala dengan API LINQ lengkap: github.com/nicholas22/propelS
Scooterville
4
@craastad Sebagai seorang. NET sekarang sebagian besar terjebak di dunia Java, saya merasakan sakit Anda. Anda harus mencoba Scala - fungsi / penutupan kelas pertama, untuk pemahaman (tidak sama dengan sintaks query LINQ, tetapi berguna dalam banyak situasi yang sama), sistem tipe terpadu, inferensi tipe, beberapa solusi yang mudah untuk penghapusan tipe generik ... semua berjalan di JVM, beroperasi dengan Java. Ditambah banyak kebaikan fungsional lainnya seperti pencocokan pola, jenis opsi, dll.
Tim Goodman

Jawaban:

808

Tidak ada yang seperti LINQ untuk Java.

...

Edit

Sekarang dengan Java 8 kami diperkenalkan dengan Stream API , ini adalah hal yang mirip ketika berhadapan dengan koleksi, tetapi tidak persis sama dengan Linq.

Jika ORM yang Anda cari, seperti Entity Framework, maka Anda dapat mencoba Hibernate

:-)

AgileJon
sumber
9
apakah ada sesuatu dalam rencana itu? diintegrasikan ke dalam bahasa? Apakah ada nomor JCP? dll.
Cheeso
6
Sangat benar, meskipun sebagian besar dari apa yang membuat LINQ sangat bagus adalah seberapa dalam ia diintegrasikan ke dalam bahasa dan kompiler
AgileJon
11
Maaf, 'sangat benar' dimaksudkan untuk 280Z28. Saya tidak tahu apakah ada JCP untuk itu. LINQ mengharuskan beberapa perubahan pada bahasa C #, mengingat kecepatan JCP bekerja pada saya tidak akan menahan nafas.
AgileJon
12
Ini tidak benar. Lihat: stackoverflow.com/questions/10879761/…
Scooterville
23
LINQ adalah spesifikasi, bukan implementasi ... Ekspresi Lambda adalah bagian dari LINQ. Semua proyek yang mencoba untuk mengirim LINQ ke Java adalah implementasi untuk skenario konkret (SQL, Objects ...) tetapi tidak mencakup tujuan utama LINQ: Mengintegrasikan Query Bahasa dalam kode. Karena itu, tidak ada alternatif nyata atau initatif, untuk saat ini, yang dapat dianggap sebagai alternatif.
sesispla
154

Ada solusi alternatif, Koollection .

Coolection tidak berpura-pura menjadi lambda baru, namun kami dikelilingi oleh proyek-proyek lama Jawa di mana lib ini akan membantu. Ini sangat sederhana untuk digunakan dan diperluas, hanya mencakup tindakan iterasi yang paling banyak digunakan pada koleksi, seperti itu:

from(people).where("name", eq("Arthur")).first();
from(people).where("age", lessThan(20)).all();
from(people).where("name", not(contains("Francine"))).all();
19WAS85
sumber
7
String untuk nama kolom, yang berarti kompiler dan IDE autocomplete tidak akan membantu melawan kesalahan ketik dan refactoring sulit. Adakah rencana untuk mengubahnya?
Ekevoo
2
Hai, Ekevoo. Saya pikir itu akan menjadi luar biasa dan saya mencoba melakukannya kapan-kapan. Tetapi pada saat ini, dengan Java 8, Coollection adalah lib yang sudah usang. Mungkin ini berguna untuk proyek tertua ... Bagaimana menurut Anda?
19WAS85
1
@WagnerAndrade Komit terakhir adalah 5-6 tahun yang lalu. Saya mengasumsikan fungsi sebagian besar digantikan oleh Java 8? Juga, nama yang sangat keren :)
Abdul
145

Lambdas sekarang tersedia dalam Java 8 dalam bentuk JSR-335 - Ekspresi Lambda untuk Bahasa Pemrograman JavaTM

UPDATE : JDK8 sekarang telah dirilis yang berisi lambda proyek. Layak untuk mengambil salinan Java 8 in Action yang saat ini masih MEAP.

Bacalah artikel Brian Goetz yang berkaitan dengan lambdas untuk pemahaman yang layak tentang bagaimana lambdas diimplementasikan dalam JDK8 sementara juga mendapatkan pemahaman tentang stream, iterasi internal, hubungan pendek dan referensi konstruktor .. Juga periksa JSR di atas untuk mendapatkan contoh lebih lanjut .

Saya telah menulis sebuah blog tentang beberapa keuntungan menggunakan lambdas di JDK8 yang disebut The Power of the Arrow , juga NetBeans 8 memiliki dukungan besar untuk mengkonversi konstruk ke JDK8 yang saya juga blogging tentang Migrasi ke JDK 8 dengan NetBeans .

Brett Ryan
sumber
Bukankah lambdas juga dijadwalkan berada di Jawa 7? Apa yang terjadi dengan itu?
BlueRaja - Danny Pflughoeft
7
Oracle membeli Sun (lidah di pipi). Java 7 terlalu lama (5 tahun) sehingga lambdas tidak masuk dalam daftar pendek, ini agak mengecewakan massa. Itu dikatakan Oracle memang terlihat seperti mengambil bola dan saya pikir kami dijadwalkan untuk Jawa 8 Oktober tahun depan.
Brett Ryan
1
Perhatikan bahwa Status Lambda telah diperbarui sekali lagi yang sekarang mencakup stream, iterasi internal, hubungan arus pendek, dan referensi konstruktor. Saya menyarankan Anda semua untuk membaca dokumen baru.
Brett Ryan
6
Ekspresi Lambda adalah bagian kecil dari LINQ.
sesispla
4
@NeWNeO, jika Anda merujuk ke bahasa query di C # maka ya, tidak ada yang seperti ini yang datang ke Jawa, namun dalam pengalaman saya kebanyakan pengembang C # yang berpengalaman lebih suka sintaks lambda daripada bahasa query. Namun jika Anda merujuk ke LINQ-to-Entities misalnya maka Anda akan menemukan bahwa lambdas di java akan mengaktifkan ini dan banyak lagi. Ada banyak lagi yang datang ke Java 8 untuk mengaktifkan ini, seperti metode bek .
Brett Ryan
119

Anda dapat memilih item dalam koleksi (dan banyak lagi) dengan cara yang lebih mudah dibaca dengan menggunakan perpustakaan lambdaj

https://code.google.com/archive/p/lambdaj/

Ini memiliki beberapa keunggulan dibandingkan perpustakaan Quaere karena tidak menggunakan string ajaib, itu benar-benar tipe aman dan menurut saya itu menawarkan DSL yang lebih mudah dibaca.

Mario Fusco
sumber
6
Ini bagus, tetapi masih jauh dari membangun kueri dan mengeksekusinya lagi sql, xml, koleksi, dll.
bytebender
mengapa saya bisa mendapatkan java.lang.ExceptionInInitializerError saat menggunakan lambdaj pilih pada kelas khusus di proyek android saya?
topwik
1
+1 ini sangat bagus untuk kita yang tidak peduli tentang SQL / XML dan hanya ingin akses yang lebih mudah ke koleksi.
ashes999
101

Anda tidak akan menemukan padanan LINQ kecuali Anda menggunakan javacc untuk membuat padanan Anda sendiri.

Sampai hari itu ketika seseorang menemukan cara yang layak untuk melakukannya, ada beberapa alternatif yang baik, seperti

Lukas Eder
sumber
github.com/TrigerSoft/jaque menemukan cara ini dan mari kita membuat Pohon Ekspresi. Dikombinasikan dengan Java 8 Lambdas, kapasitas LINQ apa ​​pun dapat diimplementasikan dengan upaya yang sama seperti di .Net.
Konstantin Triger
Lihat jawaban ini untuk perbandingan: stackoverflow.com/questions/25989449/…
Konstantin Triger
49

LINQ ke Objek - JAVA 8 telah menambahkan API Stream yang menambahkan dukungan untuk operasi gaya fungsional pada aliran nilai:

Paket java.util.stream

Java 8 Dijelaskan: Menerapkan Koleksi Lambdas ke Java

LINQ ke SQL / NHibernate / dll. (query database) - Salah satu opsi adalah menggunakan JINQ yang juga menggunakan fitur JAVA 8 baru dan dirilis pada 26 Februari 2014 di Github: https://github.com/my2iu/Jinq

Jinq menyediakan pengembang cara mudah dan alami untuk menulis kueri basis data di Jawa. Anda dapat memperlakukan data basis data seperti objek Java normal yang disimpan dalam koleksi. Anda dapat mengulanginya dan memfilternya menggunakan perintah Java normal, dan semua kode Anda akan secara otomatis diterjemahkan ke dalam kueri basis data yang dioptimalkan. Akhirnya, kueri gaya LINQ tersedia untuk Java!

Situs proyek JINQ: http://www.jinq.org/

Răzvan Flavius ​​Panda
sumber
Tidak yakin mengapa pembaca tidak memperhatikan jawaban Anda meskipun Stream API adalah yang paling dekat dengan LINQ!
Rafid
3
Streams API adalah lelucon buruk dibandingkan dengan LINQ.
Andrei Rînea
1
Maaf kawan, jangan bermaksud kasar. Saya mencari yang setara LINQ setelah mengalahkan kepalaku dengan stream API. Saya hanya ingin mengatakan bahwa itu tidak setara nyata, itu saja.
Andrei Rînea
1
@ AndreiRînea Apakah Anda mencari penyedia LINQ (LINQ ke XML, LINQ ke JSON, LINQ ke NHibernate, dll.) Fungsi yang setara?
Răzvan Flavius ​​Panda
2
Yang saya butuhkan adalah sarana untuk mengelompokkan dan memaksimalkan koleksi .. Saya akhirnya berhasil tetapi dengan banyak usaha dan terlalu banyak kode.
Andrei Rînea
29

Ada proyek yang disebut quaere .

Ini adalah kerangka kerja Java yang menambahkan kemampuan untuk meminta koleksi.

Catatan: Menurut penulis, proyek tidak dipertahankan lagi.

Sadegh
sumber
2
Quaere sepertinya memberikan sedikit dari apa yang LINQ sediakan, tetapi pertanyaannya adalah untuk 'setara'
AgileJon
6
Jadi itu sesuatu seperti LINQ, jika tidak setara langsung? Setidaknya itu terdengar membantu
Brian Agnew
3
@ AgileJon: Jika dia benar-benar berarti setara, dia tidak akan bertanya. Dia bisa saja mengetik from x in xs select xdan menemukan jawabannya (tidak).
kizzx2
18

Ada banyak padanan LINQ untuk Java, lihat di sini untuk perbandingan.

Untuk kerangka kerja gaya Quaere / LINQ yang aman, coba gunakan Querydsl . Querydsl mendukung JPA / Hibernate, JDO, SQL dan Java Collections.

Saya adalah pengelola Querydsl, jadi jawaban ini bias.

Timo Westkämper
sumber
6
Tautan "kerangka kerja serupa" sudah mati. Apakah Anda masih memiliki halaman yang setara?
Lukas Eder
Kapan kami akan mendapatkan buku QueryDSL? Atau bahkan pilihan pelatihan yang terjangkau? Tautan dukungan Anda 404s.
kervin
16

Anda dapat menggunakan scala, ini mirip dengan sintaks dan sebenarnya mungkin lebih kuat daripada LINQ.

Erion
sumber
1
Esp. "Untuk pemahaman" Scala.
Nico
10

Seperti pada 2014, saya akhirnya bisa mengatakan bahwa LINQ akhirnya ada di java 8. Jadi tidak perlu mencari alternatif LINQ lagi.

Abhinab Kanrar
sumber
9

Sekarang Java 8 mendukung lambdas, dimungkinkan untuk membuat API Java yang sangat mirip dengan LINQ.

Jinq adalah salah satu pustaka gaya LINQ baru untuk Java.

Saya adalah pengembang perpustakaan ini. Ini didasarkan pada lima tahun penelitian tentang penggunaan analisis bytecode untuk menerjemahkan Java ke permintaan basis data. Mirip dengan bagaimana C # D-LINQ adalah lapisan permintaan yang duduk di atas Entity Framework, Jinq dapat bertindak sebagai lapisan permintaan yang berada di atas JPA atau jOOQ. Ini memiliki dukungan untuk agregasi, grup, dan subkueri. Bahkan Erik Meijer (pencipta LINQ) telah mengakui Jinq .

Ming-Yee Iu
sumber
8

Lihat SBQL4J . Ini adalah jenis bahasa query kuat yang aman yang terintegrasi dengan Java. Mengizinkan menulis kueri yang rumit dan berlipat ganda. Ada banyak operator, metode Java dapat dipanggil dalam permintaan sehingga sebagai konstruktor. Permintaan diterjemahkan ke kode Java murni (tidak ada refleksi saat runtime) sehingga eksekusi sangat cepat.

EDIT: Yah, sejauh ini SBQL4J itu adalah ekstensi HANYA ke bahasa Java yang memberikan kemampuan query yang mirip dengan LINQ. Ada beberapa proyek menarik seperti Quaere dan JaQue tetapi mereka hanya API, bukan ekstensi sintaksis / semantik dengan keamanan tipe kuat dalam waktu kompilasi.

Emil Wcisło
sumber
6
Anda mungkin ingin menyebutkan peran Anda dalam proyek.
Thorbjørn Ravn Andersen
8

Java LINQ untuk implementasi SQL . Menyediakan integrasi bahasa lengkap dan set fitur yang lebih besar dibandingkan dengan .NET LINQ.

Konstantin Triger
sumber
2
Bisakah saya menggunakan JaQue untuk membaca / menulis file XML dengan cara yang sama yang bisa kita lakukan dengan LINQ?
Khurram Majeed
7

Saya mencoba jambu-perpustakaan dari google. Ini memiliki FluentIterableyang saya pikir dekat dengan LINQ. Juga lihat FunctionalExplained .

List<String> parts = new ArrayList<String>();  // add parts to the collection.    
FluentIterable<Integer> partsStartingA = 
    FluentIterable.from(parts).filter(new Predicate<String>() {
        @Override
        public boolean apply(final String input) {
            return input.startsWith("a");
        }
    }).transform(new Function<String, Integer>() {
        @Override
        public Integer apply(final String input) {
            return input.length();
        }
    });

Tampaknya menjadi perpustakaan yang luas untuk Jawa. Tentu saja tidak sesingkat LINQ tetapi terlihat menarik.

Madhan Ganesh
sumber
7

https://code.google.com/p/joquery/

Mendukung berbagai kemungkinan,

Koleksi yang diberikan,

Collection<Dto> testList = new ArrayList<>();

dari jenis,

class Dto
{
    private int id;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getText()
    {
        return text;
    }
}

Saring

Java 7

Filter<Dto> query = CQ.<Dto>filter(testList)
    .where()
    .property("id").eq().value(1);
Collection<Dto> filtered = query.list();

Java 8

Filter<Dto> query = CQ.<Dto>filter(testList)
    .where()
    .property(Dto::getId)
    .eq().value(1);
Collection<Dto> filtered = query.list();

Juga,

Filter<Dto> query = CQ.<Dto>filter()
        .from(testList)
        .where()
        .property(Dto::getId).between().value(1).value(2)
        .and()
        .property(Dto::grtText).in().value(new string[]{"a","b"});

Penyortiran (juga tersedia untuk Java 7)

Filter<Dto> query = CQ.<Dto>filter(testList)
        .orderBy()
        .property(Dto::getId)
        .property(Dto::getName)
    Collection<Dto> sorted = query.list();

Pengelompokan (juga tersedia untuk Java 7)

GroupQuery<Integer,Dto> query = CQ.<Dto,Dto>query(testList)
        .group()
        .groupBy(Dto::getId)
    Collection<Grouping<Integer,Dto>> grouped = query.list();

Bergabung (juga tersedia untuk Java 7)

Diberikan,

class LeftDto
{
    private int id;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getText()
    {
        return text;
    }
}

class RightDto
{
    private int id;
    private int leftId;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getLeftId()
        {
            return leftId;
        }

    public int getText()
    {
        return text;
    }
}

class JoinedDto
{
    private int leftId;
    private int rightId;
    private String text;

    public JoinedDto(int leftId,int rightId,String text)
    {
        this.leftId = leftId;
        this.rightId = rightId;
        this.text = text;
    }

    public int getLeftId()
    {
        return leftId;
    }

    public int getRightId()
        {
            return rightId;
        }

    public int getText()
    {
        return text;
    }
}

Collection<LeftDto> leftList = new ArrayList<>();

Collection<RightDto> rightList = new ArrayList<>();

Dapat Bergabung seperti,

Collection<JoinedDto> results = CQ.<LeftDto, LeftDto>query().from(leftList)
                .<RightDto, JoinedDto>innerJoin(CQ.<RightDto, RightDto>query().from(rightList))
                .on(LeftFyo::getId, RightDto::getLeftId)
                .transformDirect(selection ->  new JoinedDto(selection.getLeft().getText()
                                                     , selection.getLeft().getId()
                                                     , selection.getRight().getId())
                                 )
                .list();

Ekspresi

Filter<Dto> query = CQ.<Dto>filter()
    .from(testList)
    .where()
    .exec(s -> s.getId() + 1).eq().value(2);
Pelican Terbang Rendah
sumber
5

Anda dapat mencoba koleksi saya CollectionsQuery . Hal ini memungkinkan untuk menjalankan LINQ seperti kueri atas koleksi objek. Anda harus melewati predikat, seperti di LINQ. Jika Anda menggunakan java6 / 7 daripada Anda harus menggunakan sintaks lama dengan Antarmuka:

List<String> names = Queryable.from(people)
                                    .filter(new Predicate<Person>() {
                                                public boolean filter(Person p) {
                                                    return p.age>20;
                                                }
                                            })
                                    .map   (new Converter<Person,String>() {
                                                public Integer convert(Person p) {
                                                    return p.name;
                                                }
                                            })
                                    .toList();

Anda juga dapat menggunakannya di Java8, atau di java lama dengan RetroLambda dan plugin gradle , maka Anda akan memiliki sintaks mewah baru:

List<String> names = Queryable.from(people)
                                    .filter(p->p.age>20)
                                    .map   (p->p.name)
                                    .toList();

Jika Anda perlu menjalankan query DB, daripada yang dapat Anda lihat di JINQ, seperti yang disebutkan di atas, tetapi tidak dapat di-porting kembali oleh RetroLambda, lakukan penggunaan lambdas berseri.

Bogdan Mart
sumber
4

Hanya untuk menambahkan alternatif lain: Java 6 memang memiliki solusi untuk query database tipe-aman menggunakan paket javax.persistence.criteria .

Meskipun saya harus mengatakan bahwa ini bukan LINQ, karena dengan LINQ Anda dapat meminta setiap IEnumerable.

metator
sumber
Ya itu API JPA. Jauh dari LINQ, tapi lebih baik daripada tidak sama sekali. Dan dapat dikatakan itu didasarkan pada API Kriteria Hibernate. Lihat: docs.jboss.org/hibernate/core/3.6/reference/en-US/html/…
Hendy Irawan
4

Ada perpustakaan yang sangat bagus yang dapat Anda gunakan untuk ini.

Terletak di sini: https://github.com/nicholas22/jpropel-light

Lambdas tidak akan tersedia sampai Java 8, jadi menggunakannya sedikit berbeda dan tidak terasa alami.

Moox
sumber
4

Kedengarannya seperti Linq yang dibicarakan semua orang di sini hanyalah LinqToObjects. Yang saya percaya hanya menawarkan fungsionalitas yang sudah dapat dicapai hari ini di Jawa, tetapi dengan sintaks yang benar-benar jelek.

Apa yang saya lihat sebagai kekuatan sebenarnya dari Linq di .Net adalah bahwa ekspresi lambda dapat digunakan dalam konteks yang membutuhkan delegasi atau ekspresi dan kemudian akan dikompilasi ke dalam bentuk yang sesuai. Inilah yang memungkinkan hal-hal seperti LinqToSql (atau apa pun selain LinqToObjects) berfungsi, dan memungkinkan mereka memiliki sintaksis yang identik dengan LinqToObjects.

Sepertinya semua proyek yang disebutkan di atas hanya menawarkan kemampuan LinqToObjects. Yang membuat saya hal bahwa fungsi tipe LinqToSql tidak di cakrawala untuk Jawa.

MarkPflug
sumber
4

Untuk koleksi fungsional dasar, Java 8 memiliki built-in, sebagian besar bahasa JVM non-Java utama memilikinya built-in (Scala, Clojure, dll), dan Anda bisa menambahkan libs untuk versi Java yang lebih lama.

Untuk akses terintegrasi bahasa penuh ke database SQL, Scala (berjalan pada JVM) memiliki Slick

tanah liat
sumber
3

Untuk LINQ (LINQ to Objects), Java 8 akan memiliki sesuatu yang setara, lihat Project Lambda .

Ini memiliki Enumerable's LINQ untuk ekstensi Objects seperti barang . Tetapi untuk hal-hal LINQ yang lebih rumit seperti Ekspresi dan ExpressionTree (ini diperlukan untuk LINQ ke SQL dan penyedia LINQ lainnya jika mereka ingin memberikan sesuatu yang dioptimalkan dan nyata), belum ada yang setara tapi mungkin kita akan melihat itu di masa depan :)

Tapi saya tidak berpikir akan ada sesuatu seperti pertanyaan deklaratif di Jawa di masa depan

Ebrahim Byagowi
sumber
2

Tidak ada fitur seperti itu di java. Dengan menggunakan API lain Anda akan mendapatkan fitur ini. Seperti misalkan kita memiliki Obyek hewan yang berisi nama dan id. Kami memiliki objek daftar yang memiliki objek hewan. Sekarang jika kita ingin mendapatkan semua nama hewan yang berisi 'o' dari daftar objek. kita bisa menulis kueri berikut

from(animals).where("getName", contains("o")).all();

Pernyataan Query di atas akan daftar binatang yang berisi alfabet 'o' dalam nama mereka. Informasi lebih lanjut silakan kunjungi blog berikut. http://javaworldwide.blogspot.in/2012/09/linq-in-java.html

Wisnu
sumber
2

Lihat mungil-q . (Perhatikan bahwa saat ini Anda tidak dapat mengunduhnya.)

Berikut ini contoh yang menyesuaikan tautan di atas:

Pertama kita perlu kumpulan beberapa data, katakanlah seperangkat string

String[] strings = { "bla", "mla", "bura", "bala", "mura", "buma" };

Sekarang kami ingin memilih hanya string yang dimulai dengan "b":

Query<String> stringsStartingWithB = new Query<String>(strings).where(
    new Query.Func<String, Boolean>(){
        public Boolean run(String in) {
            return in.startsWith("b");
        }
    }
);

Tidak ada data aktual yang dipindahkan yang disalin atau semacamnya, itu akan diproses segera setelah Anda mulai mengulanginya:

for(String string : stringsStartingWithB ) {
    System.out.println(string);
}
t90
sumber
1

JaQu adalah padanan LINQ untuk Java. Meskipun dikembangkan untuk basis data H2, ia harus bekerja untuk basis data apa pun karena menggunakan JDBC.

Basil Musa
sumber
1

Mungkin bukan jawaban yang Anda harapkan, tetapi jika beberapa bagian dari kode Anda memerlukan pekerjaan berat pada koleksi (pencarian, pengurutan, pemfilteran, transformasi, analisis), Anda dapat mempertimbangkan untuk menulis beberapa kelas di Clojure atau Scala .

Karena sifatnya yang fungsional, bekerja dengan koleksi adalah yang terbaik. Saya tidak punya banyak pengalaman dengan Scala, tetapi dengan Clojure Anda mungkin akan menemukan Linq yang lebih kuat di ujung jari Anda dan setelah dikompilasi, kelas yang Anda hasilkan akan berintegrasi mulus dengan sisa basis kode.

pistacchio
sumber
1
Groovy atau jRuby juga akan menjadi kandidat yang layak, karena mereka semua memiliki sifat yang jauh lebih fungsional.
cdeszaq
1

Seorang pengguna anonim menyebutkan satu lagi, Diting :

Diting adalah pustaka kelas yang menyediakan kemampuan kueri pada koleksi melalui metode berantai dan antarmuka anonim seperti Linq di .NET. Tidak seperti kebanyakan perpustakaan koleksi lain yang menggunakan metode statis perlu mengulangi seluruh koleksi, Diting menyediakan inti Enumerable class whitch berisi metode yang dapat ditangguhkan yang dideferensi untuk mengimplementasikan kueri pada koleksi atau array.

Metode yang Didukung: any, cast, contact, berisi, hitung, berbeda, elementAt, kecuali, pertama, pertama, atau Kesalahan, grup. Dengan, interset, gabung, terakhir, terakhir, atau Kesalahan, dari Jenis, pesanan, Dengan, kirim, turun, balikkan, pilih, pilihBanyak, tunggal, tunggal atau Kerusakan, lewati , skipWhile, take, takeWhile, toArray, toArrayList, union, where

Rup
sumber
1

Scala. Sekarang saya membacanya, dan menemukannya seperti LINQ tetapi lebih sederhana dan lebih tidak dapat dibaca. tapi scala bisa dijalankan di linux, ya? csharp butuh mono.

GeminiYellow
sumber
1
Scala membutuhkan runtime Java untuk dijalankan: itu tidak akan selalu berfungsi pada instalasi Linux kosong tergantung pada komponen apa yang Anda instal.
Rup
@Rup, ada JRE yang sepenuhnya sesuai untuk GNU / Linux, dan Mono tidak sepenuhnya menerapkan .NET.
Nama Tampilan
@ Besar Itu bukan poin saya, tapi Mono menjalankan LINQ dengan cukup baik bukan? Selain itu, sekarang ada .Net Core untuk Linux milik Microsoft .
Rup
(GNU /) Linux bukan satu-satunya platform selain Windows, dan JRE ada untuk berbagai macam platform. Mono tidak sepenuhnya mengimplementasikan semuanya, misalnya tidak ada WPF.
Nama Tampilan
0

Ada bahasa pemrograman Pizza (ekstensi Java) dan Anda harus melihatnya. - Menggunakan konsep "antarmuka lancar" untuk meminta data dengan cara deklaratif dan yang pada prinsipnya identik dengan LINQ tanpa ekspresi permintaan (http://en.wikipedia.org/wiki/Pizza_programming_language). Namun sayang itu tidak dikejar, tetapi itu akan menjadi salah satu cara untuk mendapatkan sesuatu yang mirip dengan LINQ ke Jawa.

Nico
sumber
1
Tentu itu dikejar, hanya saja tidak dengan nama "Pizza". Obat generik dari Pizza digabung menjadi GJ, yang kemudian menjadi kompiler referensi Java 1.3 (meskipun obat generik disembunyikan di belakang sebuah bendera hingga 1,5). Sementara itu ... sisa ide, ditambah beberapa tambahan, menjadi Scala.
Kevin Wright
Terima kasih atas info itu, tentu saja Scala adalah poin yang bagus di sini. Namun kemampuan ini di mana tidak terintegrasi ke dalam bahasa Jawa. Anda bisa menggunakan bahasa Scala untuk mengimplementasikan kode kueri yang bagus dan menggunakan biner yang dihasilkan dari Java.
Nico
Juga lihat ONGL di commons.apache.org/proper/commons-ognl , yang sedang digunakan dan masih dipertahankan.
Nico
0

Anda dapat mencoba perpustakaan ini: https://code.google.com/p/qood/

Berikut beberapa alasan untuk menggunakannya:

  1. ringan: hanya 9 antarmuka publik / kelas untuk dipelajari.
  2. permintaan seperti SQL: support group-by, order-by, join kiri, rumus, ... dll.
  3. untuk data besar: gunakan File (QFS) bukan Heap Memory.
  4. mencoba untuk memecahkan ketidakcocokan impedansi Obyek-relasional .
schsu01
sumber