2012-06-11 5 views
5
public class Product 
{ 
public string Name {set; get;} 
public string Type {set; get;} 
} 

public class ProductType 
{ 
public string Name{get;set} 
} 


var products = GetProducts(); 
var productTypes = GetProductTypes(); 

bool isValid = products.All(x=>x.Type == ??) // Help required 

'Ürünler' içindeki tüm ürünlerin yalnızca ürün türüne ait olduğundan emin olmak istiyorum.Tüm öğelerin aynı türe ait olup olmadığını nasıl kontrol edilir LINQ

Bunu linq'de nasıl başardık. Herhangi bir yardım, LINQ eşyalarıyla vurulduğum için çok müteşekkiriz? Teşekkürler.

+1

Yani tüm ürünler aynı tipte mi? –

+0

@ RaphaëlAlthaus Evet haklısınız – Lamps

cevap

9

tüm öğeleri ilk öğe ile aynı tip olmadığını kontrol edebilirsiniz:

bool isValid = products.All(x => x.Type == products.First().Type); 
+0

Yardım için teşekkürler dtb. – Lamps

+3

@Lamps Lütfen anonim yöntem çağrıları her zaman, ilk() 'nin çalıştırılacağı için gereksiz performans maliyeti olduğunu unutmayın. Lütfen daha iyi bir çözüm için cevabımı kontrol edin. –

+0

@JeffreyZhao Teşekkürler, Joey zaten, Products.First() tarafını dışarıya itmeyi planladığımı belirtti. – Lamps

11

Sen Farklı kullanabilir ve Kont olabilir:

isValid = products.Select(x => x.Type).Distinct().Count() == 1; 
+0

+1 Yardım için teşekkürler Joey, ama ben dtb'nin cevabını tercih ediyorum. – Lamps

+0

Tamam. Her ne kadar kodlarında 'products.First()' kullanımı nedeniyle yeni bir numaralayıcının yaratıldığını merak ediyorum. Ürünlerin başına bir kez olabilir. Ama şu anda test edemiyorum. – Joey

+0

Ah ok işaret için joey teşekkürler, ben First() çağrısını dışarıya itip değeri yerel değişkende saklayabilir miyim? – Lamps

6
var isValid = products.Select(p => p.Type).Distinct().Count() == 1; 

veya

var first = products.FirstOrDefault(); 
var isValid == (first == null) ? true : products.All(p => p.Type == first.Type); 
+0

@KevinBrock Haklısın, kodu çözdüm. –

0

Sadece her birinin türünü kontrol etmek istiyorsanız Sonra LINQ elemanının net - Yukarıdaki örnek

class A{ 
} 

class B{ 
} 

static void Main(string[] args) 
{ 
     ArrayList arr = new ArrayList(); 
     arr.Add(new A()); 
     arr.Add(new A()); 
     arr.Add(new A()); 
     arr.Add(new B()); 
     arr.Add(new A()); 
     int count= arr.ToArray().Count(x=> !x.GetType().Equals(typeof(A))); 
} 

, dizideki her elemanın tipi sonra

senin de aynı senaryo var ve umut sınıf tipi A'nın olmayan diziden elemanın sayı alır denetler Bu yardımcı olur umarım !!

İlgili konular