Baca dalam bahasa Inggris

Bagikan melalui


Contoh Sintaks Ekspresi Query: Operator Penggabungan (LINQ ke Himpunan Data)

Bergabung adalah operasi penting dalam kueri yang menargetkan sumber data yang tidak memiliki hubungan yang dapat dinavigasi satu sama lain, seperti tabel database relasional. Gabungan dari dua sumber data adalah asosiasi objek dalam satu sumber data dengan objek yang berbagi atribut umum di sumber data lainnya. Untuk informasi selengkapnya, lihat Gambaran Umum Operator Kueri Standar (C#) atau Gambaran Umum Operator Kueri Standar (Visual Basic).

Contoh dalam topik ini menunjukkan cara menggunakan metode GroupJoin dan Join untuk mengkueri DataSet menggunakan sintaks ekspresi kueri.

Metode FillDataSet yang digunakan dalam contoh ini ditentukan dalam Memuat Data Ke dalam Himpunan Data.

Contoh dalam topik ini menggunakan tabel Kontak, Alamat, Produk, SalesOrderHeader, dan SalesOrderDetail dalam database sampel AdventureWorks.

Contoh dalam topik ini menggunakan pernyataan using/Imports berikut:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;

Untuk informasi selengkapnya, lihat Cara: Membuat Proyek LINQ ke DataSet di Visual Studio.

GroupJoin

Contoh

Contoh ini melakukan proses GroupJoin pada tabel SalesOrderHeader dan SalesOrderDetail untuk menemukan jumlah pesanan per pelanggan. Gabungan grup setara dengan gabungan luar kiri, yang mengembalikan setiap elemen sumber data pertama (kiri), bahkan jika tidak ada elemen yang berkorelasi berada di sumber data lain.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

var orders = ds.Tables["SalesOrderHeader"].AsEnumerable();
var details = ds.Tables["SalesOrderDetail"].AsEnumerable();

var query =
    from order in orders
    join detail in details
    on order.Field<int>("SalesOrderID")
    equals detail.Field<int>("SalesOrderID") into ords
    select new
    {
        CustomerID =
            order.Field<int>("SalesOrderID"),
        ords = ords.Count()
    };

foreach (var order in query)
{
    Console.WriteLine($"CustomerID: {order.CustomerID}  Orders Count: {order.ords}");
}

Contoh

Contoh ini melakukan GroupJoin pada tabel Contact dan SalesOrderHeader. Gabungan grup setara dengan gabungan luar kiri, yang mengembalikan setiap elemen sumber data pertama (kiri), bahkan jika tidak ada elemen yang berkorelasi berada di sumber data lain.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable contacts = ds.Tables["Contact"];
DataTable orders = ds.Tables["SalesOrderHeader"];

var query =
    from contact in contacts.AsEnumerable()
    join order in orders.AsEnumerable()
    on contact.Field<Int32>("ContactID") equals
    order.Field<Int32>("ContactID")
    select new
    {
        ContactID = contact.Field<Int32>("ContactID"),
        SalesOrderID = order.Field<Int32>("SalesOrderID"),
        FirstName = contact.Field<string>("FirstName"),
        Lastname = contact.Field<string>("Lastname"),
        TotalDue = order.Field<decimal>("TotalDue")
    };

foreach (var contact_order in query)
{
    Console.WriteLine($"ContactID: {contact_order.ContactID} "
                    + "SalesOrderID: {contact_order.SalesOrderID} "
                    + "FirstName: {contact_order.FirstName} "
                    + "Lastname: {contact_order.Lastname} "
                    + "TotalDue: {contact_order.TotalDue}");
}

Bergabung

Contoh

Contoh ini melakukan gabungan antara tabel SalesOrderHeader dan SalesOrderDetail untuk mendapatkan pesanan online bulan Agustus.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable orders = ds.Tables["SalesOrderHeader"];
DataTable details = ds.Tables["SalesOrderDetail"];

var query =
    from order in orders.AsEnumerable()
    join detail in details.AsEnumerable()
    on order.Field<int>("SalesOrderID") equals
        detail.Field<int>("SalesOrderID")
    where order.Field<bool>("OnlineOrderFlag") == true
    && order.Field<DateTime>("OrderDate").Month == 8
    select new
    {
        SalesOrderID =
            order.Field<int>("SalesOrderID"),
        SalesOrderDetailID =
            detail.Field<int>("SalesOrderDetailID"),
        OrderDate =
            order.Field<DateTime>("OrderDate"),
        ProductID =
            detail.Field<int>("ProductID")
    };

foreach (var order in query)
{
    Console.WriteLine($"{order.SalesOrderID}\t{order.SalesOrderDetailID}\t{order.OrderDate:d}\t{order.ProductID}");
}

Lihat juga


Sumber Daya Tambahan: