2012-06-11 45 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 

Tôi muốn đảm bảo rằng tất cả các sản phẩm trong 'sản phẩm' thuộc về loại sản phẩm.Cách kiểm tra xem tất cả các mục thuộc cùng một loại có sử dụng LINQ

Làm cách nào để đạt được điều này trong LINQ. Bất kỳ trợ giúp được nhiều đánh giá cao tôi bị tấn công với công cụ LINQ? Cảm ơn.

+1

bạn có nghĩa là tất cả các sản phẩm cùng loại? –

+0

@ RaphaëlAlthaus Vâng bạn đúng – Lamps

Trả lời

9

Bạn có thể kiểm tra xem tất cả các mục có các loại tương tự như mục đầu tiên:

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

Cảm ơn dtb đã giúp đỡ. – Lamps

+3

@Lamps Xin lưu ý rằng nó có chi phí hiệu năng không cần thiết vì mỗi lần gọi phương thức nặc danh, 'First()' sẽ được thực thi. Vui lòng kiểm tra câu trả lời của tôi để có giải pháp tốt hơn. –

+0

@ JeffreyZhao cảm ơn, Joey đã chỉ ra rằng, tôi đang lập kế hoạch để thúc đẩy Product.First() gọi ra bên. – Lamps

11

Bạn có thể sử dụng riêng biệt và Count:

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

+1 Cảm ơn Joey vì sự giúp đỡ, nhưng tôi thích câu trả lời của dtb hơn. – Lamps

+0

OK. Mặc dù tôi tự hỏi làm thế nào thường một điều tra viên mới được tạo ra do việc sử dụng 'products.First()' trong mã của họ. Nó có thể là một lần cho mỗi sản phẩm 'sản phẩm'. Nhưng tôi không thể kiểm tra ngay bây giờ. – Joey

+0

Ah ok cảm ơn joey cho chỉ ra nó, có thể là tôi có thể đẩy First() gọi bên ngoài và lưu trữ giá trị trong một biến địa phương? – Lamps

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

hoặc

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

@ KevinBrock Bạn nói đúng, tôi đã cố định mã. –

0

Nếu bạn chỉ muốn kiểm tra loại của mỗi e lement trong LINQ sau đó -

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))); 
} 

Ví dụ ở trên, kiểm tra các loại của mỗi phần tử trong mảng sau đó được đếm phần tử từ mảng mà không phải là của kiểu lớp A.

Tôi hy vọng bạn có cùng một kịch bản và hi vọng điêu nay co ich !!

Các vấn đề liên quan