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

का उपयोग करके एक ही प्रकार के हैं या नहीं, मैं यह सुनिश्चित करना चाहता हूं कि 'उत्पादों' के सभी उत्पाद केवल उत्पाद प्रकार के हैं।यह जांचने के लिए कि क्या सभी आइटम LINQ

यह linq में कैसे प्राप्त कर सकता है। किसी भी मदद की बहुत सराहना की है मुझे LINQ सामान से मारा गया है? धन्यवाद।

+1

क्या आपका मतलब है कि सभी उत्पाद एक ही प्रकार के हैं? –

+0

@ राफेल अलाथॉस हाँ आप सही हैं – Lamps

उत्तर

9

आप देख सकते हैं सभी आइटम पहले आइटम के रूप में एक ही प्रकार है:

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

सहायता के लिए धन्यवाद डीटीबी। – Lamps

+3

@ लैंप कृपया ध्यान दें कि जब भी अनाम विधि कॉल करता है, तब से अनावश्यक प्रदर्शन लागत होती है, 'पहला() 'निष्पादित होगा। बेहतर समाधान के लिए कृपया मेरा उत्तर चेकआउट करें। –

+0

@ जेफरी झाओ धन्यवाद, जॉय ने पहले ही बताया है कि, मैं उत्पादों को धक्का देने की योजना बना रहा हूं। सबसे पहले() कॉल आउट करें। – Lamps

11

आप विशिष्ट का उपयोग करें और गणना कर सकते हैं:

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

+1 धन्यवाद जॉय मदद के लिए, लेकिन मैं डीटीबी के जवाब पसंद कर रहा हूं। – Lamps

+0

यह ठीक है। हालांकि मुझे आश्चर्य होगा कि 'कोड' फर्स्ट() 'के उपयोग के कारण उनके कोड में कितनी बार एक नया गणक बनाया जाता है। यह प्रति बार 'उत्पादों' आइटम हो सकता है। लेकिन मैं अभी परीक्षण नहीं कर सकता। – Joey

+0

आह ठीक है, इसे इंगित करने के लिए धन्यवाद, क्या मैं पहले() कॉल को बाहर रख सकता हूं और मूल्य को स्थानीय चर में संग्रहीत कर सकता हूं? – Lamps

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

या

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

@ केविन ब्रॉक आप सही हैं, मैंने कोड तय कर लिया है। –

0

यदि आप केवल प्रत्येक ई के प्रकार की जांच करना चाहते हैं तो LINQ में lement -

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

उदाहरण ऊपर, जाँच करता है सरणी में प्रत्येक तत्व के प्रकार तो सरणी से तत्व की गिनती कौन सी क्लास प्रकार ए के नहीं हैं

मुझे आशा है कि आप एक ही परिदृश्य है और हो जाता है उम्मीद है की यह मदद करेगा !!

संबंधित मुद्दे