Pertanyaan Menggunakan LINQ untuk menentukan apakah ada elemen yang ListA ada di ListB?


Saya mencoba menggunakan PredicateBuilder untuk menyusun kueri dinamis LINQ. Dalam objek saya, saya memiliki daftar "Status" dan saya memiliki daftar status lain yang ingin saya cari.

Jadi saya harus bisa melihat di properti object.Status saya (daftar) dan melihat apakah itu berisi salah satu item dalam daftar permintaan saya.

Saya telah mengotak-atik .Any () dan .Contains () tetapi tidak dapat menemukan sintaks yang benar.

Apa yang saya lakukan salah? Di bawah ini adalah beberapa hal yang saya coba, tetapi tidak ada yang memiliki sintaks yang benar.

myObject.Statuses.Contains(myStatusList);

myObject.Statuses.Any(myStatusList);

myObject.Statuses.Any(s => s == myStatusList);

5
2018-06-30 15:52


asal


Jawaban:


got.Any(x => want.Contains(x))

Namun, pada refleksi lebih lanjut, saya akan menulis a ContainsAny metode penyuluhan, untuk membuatnya lebih mudah dibaca. Pelaksanaannya mungkin akan sama (meskipun want.Intersect(got).Any() juga akan berfungsi).


9
2018-06-30 15:53



Maksud kamu:

myObject.Statuses.Any(s => myStatusList.Contains(s));

? Ini juga sama:

myStatusList.Any(s => myObject.Statuses.Contains(s));

5
2018-06-30 15:53



Bagaimana dengan berpotongan http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#intersect1

  public void Linq50()
  {
       int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
       int[] numbersB = { 1, 3, 5, 7, 8 };

       var commonNumbers = numbersA.Intersect(numbersB);

       Console.WriteLine("Common numbers shared by both arrays:");
       foreach (var n in commonNumbers)
       {
           Console.WriteLine(n);
       }
   }

1
2018-06-30 15:58