none
(Sumber: milist DOTNET) Tanya cara compare 2 list RRS feed

  • Pertanyaan

  • Dear all,

    misalkan saya punya class model berikut

    public partial class Student

    {

    public string NIK { get; set; }

    public string Nama { get; set; }

     

    public Student { }

    }

     

    misalkan juga, saya punya 2 List<Student> sbb :

    List<Student> listExistingStudent = new List<Student>()

    {

    new Student { NIK = "1", Nama = "A" },

    new Student { NIK = "2", Nama = "B" },

    new Student { NIK = "3", Nama = "C" }

    }

     

    List<Student> listChangesStudent = new List<Student>()

    {

    new Student { NIK = "2", Nama = "D" },

    new Student { NIK = "100", Nama = "ZZZ" }

    }

     

    Dari 2 list itu, saya ingin bandingkan dan pisahkan hasilnya dalam 2 list lagi :

    1. List<Student> toUpdate, yang isinya mengandung NIK = "2", karena dibandingkan dengan listExistingStudent NIK = "2" sudah ada, hanya saja beda Nama.
    2. List<Student> toInsert, yang isinya mengandung NIK = "100", karena dibandingkan dengan listExistingStudent NIK = "100" belum ada.

    Saya kesulitan dalam membandingkan listExistingStudent dengan listChangesStudent itu. Saya punya 2 stored procedure, yang pertama untuk update, yang kedua untuk insert. Stored procedure untuk yang update rencananya akan menerima info dari List<Student> toUpdate dan untuk yang insert akan menerima info dari List<Student> toInsert. Ada yang bisa bantu saya penyelesaiannya baiknya gimana? Thanks.


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Kamis, 05 Januari 2012 06.11
    Moderator

Jawaban

  • Jika keperluannya untuk insert dan update data, mengapa tidak membuat 1 stored procedure tambahan untuk insert dan update, dengan detail sbb:

    ·         Jika NIK adalah ID, maka ini adalah field yang akan di cek setiap kali ada permintaan untuk insert/update

    ·         Jika NIK sudah exists, maka prosesnya menjadi update

    ·         Jika NIK belum exists, maka prosesnya menjadi insert

    Dengan cara ini, database menjadi lebih aktif untuk menanggung sebagian business process, dan tidak terbebankan di aplikasi, sehingga proses pemisahan list menjadi 2 list lagi menjadi tidak diperlukan

     


    Dijawab oleh:
    Andri Mirandi


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Kamis, 05 Januari 2012 06.12
    Moderator

Semua Balasan

  • Salam,
    Coba cara berikut:


    var toInsert = listChangesStudent.Where(item => listExistingStudent.FirstOrDefault(x=>x.NIK == item.NIK) == null);

    var toUpdate = listChangesStudent.Where(item => toInsert.FirstOrDefault(x=>x.NIK == item.NIK) == null);

    Tapi perlu diperhatikan bahwa dengan mengcompare 2 list seperti ini, lama eksekusi kode anda tergantung dari jumlah item yg ada pada list. Sbg contoh, untuk cara diatas, akan dieksekusi sebanyak maks=jumlah item pada listExistingStudent * jumlah item pada listChangesStudent.

    Kalau jumlah datanya banyak, harus dipikirkan cara lain yang lebih efisien. Misal dengan UPSERT (harus mengubah stored procedure anda). Atau dengan menambahkan flag pada class Student untuk menandai bahwa sebuah objek baru di create (to insert) atau modified (to update).

    Dijawab oleh: Putu


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Kamis, 05 Januari 2012 06.12
    Moderator
  • Jika keperluannya untuk insert dan update data, mengapa tidak membuat 1 stored procedure tambahan untuk insert dan update, dengan detail sbb:

    ·         Jika NIK adalah ID, maka ini adalah field yang akan di cek setiap kali ada permintaan untuk insert/update

    ·         Jika NIK sudah exists, maka prosesnya menjadi update

    ·         Jika NIK belum exists, maka prosesnya menjadi insert

    Dengan cara ini, database menjadi lebih aktif untuk menanggung sebagian business process, dan tidak terbebankan di aplikasi, sehingga proses pemisahan list menjadi 2 list lagi menjadi tidak diperlukan

     


    Dijawab oleh:
    Andri Mirandi


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Kamis, 05 Januari 2012 06.12
    Moderator