de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 user2944829
user2944829
Question

LINQ pilih dalam kamus C #

Saya memiliki kamus berikutnya di C#

Dictionary<string, object> subDictioanry = new Dictionary<string, object>();

List<Dictionary<string, string>> subList = new List<Dictionary<string, string>>();

subList.Add(new Dictionary<string, string>(){
    {"valueLink", "link1"},
    {"valueTitle","title1"}
});
subList.Add(new Dictionary<string, string>(){
    {"valueLink", "link2"},
    {"valueTitle","title2"}
});
subList.Add(new Dictionary<string, string>(){
    {"valueLink", "link3"},
    {"valueTitle","title3"}
});

subDictioanry.Add("title", "title");
subDictioanry.Add("name", "name");
subDictioanry.Add("fieldname1", subList);

Dictionary<string, object> exitDictionary = new Dictionary<string, object>();
exitDictionary.Add("first", subDictioanry);
exitDictionary.Add("second", subDictioanry);

Apakah mungkin untuk mendapatkan semua "valueTitle" dengan bantuan LINQ select?

UPDATE: Maaf, saya harus menuliskannya terlebih dahulu - saya perlu mendapatkan hasil dari exitDictionary, bukan dari subList

24 2013-11-01T11:56:33+00:00 3
 JeromeJ
JeromeJ
Pertanyaan edit 1 Agustus 2018 в 10:53
Pemrograman
linq
c#
dictionary
Solution / Answer
Alex Filipovici
Alex Filipovici
1 November 2013 в 12:03
2013-11-01T12:03:12+00:00
Lebih
Sumber
Sunting
#22687428

Jika Anda mencari berdasarkan nilai fieldname1, cobalah ini:

var r = exitDictionary
   .Select(i => i.Value).Cast<Dictionary<string, object>>()
   .Where(d => d.ContainsKey("fieldname1"))
   .Select(d => d["fieldname1"]).Cast<List<Dictionary<string, string>>>()
   .SelectMany(d1 => 
       d1
        .Where(d => d.ContainsKey("valueTitle"))
        .Select(d => d["valueTitle"])
        .Where(v => v != null)).ToList();

Jika Anda mencari berdasarkan tipe nilai dalam subDictionary (Dictionary<string, object> secara eksplisit), Anda dapat melakukan ini:

var r = exitDictionary
   .Select(i => i.Value).Cast<Dictionary<string, object>>()
   .SelectMany(d=>d.Values)
   .OfType<List<Dictionary<string, string>>>()
   .SelectMany(d1 => 
       d1
        .Where(d => d.ContainsKey("valueTitle"))
        .Select(d => d["valueTitle"])
        .Where(v => v != null)).ToList();

Kedua alternatif tersebut akan kembali:

title1
title2
title3
title1
title2
title3
Alex Filipovici
Alex Filipovici
Jawaban edit 1 November 2013 в 12:28
21
0
 Arran
Arran
1 November 2013 в 12:01
2013-11-01T12:01:47+00:00
Lebih
Sumber
Sunting
#22687427

Salah satu caranya adalah dengan meratakan daftar terlebih dahulu dengan SelectMany:

subList.SelectMany(m => m).Where(k => k.Key.Equals("valueTitle"));
9
0
 gleng
gleng
1 November 2013 в 11:58
2013-11-01T11:58:10+00:00
Lebih
Sumber
Sunting
#22687426

Ini akan mengembalikan semua nilai yang cocok dengan kunci Anda valueTitle

subList.SelectMany(m => m).Where(kvp => kvp.Key == "valueTitle").Select(k => k.Value).ToList();
 gleng
gleng
Jawaban edit 1 November 2013 в 12:05
4
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 7 jam yang lalu
2
Akshit Mehta
Terdaftar 2 hari yang lalu
3
me you
Terdaftar 6 hari yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi