Linq - Bergabung melalui kamus di mana KeyValuePair.Value adalah koleksinya sendiri

mencoba memahami seperti apa tampilan gabungannya pada contoh di bawah ini. Bantuan apa pun untuk menentukan apakah mungkin untuk menulis linq untuk yang berikut ini akan sangat dihargai!

        List<string> col1;
        Dictionary<string, List<string>> join2;

Saya ingin memilih semua kunci dari kamus di mana item di col1 ada di koleksi Daftar Nilai kamus.

        IEnumerable<string> query = from c1 in col1
                                    join kvp in join2 on c1 equals kvp.Value
                                    where c1 == "foo"
                                    orderby kvp.Key
                                    select kvp.Key;

Jelas sekali hal di atas gagal karena kvp.Value adalah Daftar dan bukan string yang disamakan dengan c1 - ada petunjuk?


person Matt S    schedule 19.07.2011    source sumber
comment
Di manakah semua item di col1 muncul dalam nilai? Di manakah setiap item di col1 muncul dalam nilai? Apakah ketertiban itu penting? Di mana foo masuk? Benar-benar tidak jelas apa yang ingin Anda capai saat ini. Tolong berikan beberapa contoh data.   -  person Jon Skeet    schedule 19.07.2011
comment
Hai Jon, saya ingin menautkan koleksi di properti Nilai dari KeyValuePair untuk mengembalikan Kunci. Bagian 'foo' bersyarat menunjukkan nilai yang ingin saya temukan dalam kumpulan nilai untuk mengembalikan kunci. Saya mencari Apa saja yang cocok - jadi klausa kelipatan from dan kondisi di mana yang menggunakan a berisi cocok dengan kebutuhan saya. Terima kasih telah melihat.   -  person Matt S    schedule 19.07.2011
comment
Menggunakan panggilan apa pun juga akan berhasil...   -  person Jon Skeet    schedule 19.07.2011


Jawaban (1)


Saya tidak yakin mengapa gabungan diperlukan... jika Anda memilih "foo" maka yang berikut ini akan menghasilkan hasil yang sama:

        IEnumerable<string> query = from kvp in join2
                                where kvp.Value.Contains ("foo")
                                orderby kvp.Key
                                select kvp.Key;

Atau dengan bergabung

        IEnumerable<string> query = from c1 in col1 where c1 == "foo" from kvp in join2 
                                where kvp.Value.Contains (c1) 
                                orderby kvp.Key
                                select kvp.Key;
person Yahia    schedule 19.07.2011
comment
Terima kasih - itulah yang saya inginkan - ini diringkas menjadi contoh sederhana, alasan rumit yang sebenarnya lebih masuk akal dalam kasus bisnis saya. Tidak menyadari banyak hal yang mungkin dilakukan, sangat masuk akal sekarang. Terima kasih!!! - person Matt S; 19.07.2011