2010-03-17 16 views
7

मैं यह जांचने की कोशिश कर रहा हूं कि लिनक में कोई तारीख शून्य है और यदि यह भविष्य की तारीख की जांच नहीं कर रहा है।लिंक जहां एकाधिक स्थितियों और शून्य जांच के साथ खंड

QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate); 

मुझे दूसरा चेक चाहिए केवल तभी लागू होगा जब पहला सत्य हो। मैं एक एकल भंडार पैटर्न का उपयोग कर रहा हूं और FindAll ने एक क्लॉज

किसी भी विचार को स्वीकार किया है? यहां बहुत सारे प्रश्न हैं लेकिन उत्तर देने के लिए, मैं लिंक के लिए बहुत नया हूं जैसा कि आप अनुमान लगा सकते हैं :)

संपादित करें: मुझे अब आवश्यक परिणाम मिलते हैं लेकिन यह सशर्त जांच करेगा कुछ मामलों में शून्य मूल्यों पर। क्या यह एक बुरी बात नहीं है?

+0

क्या आप केवल इतना नहीं कह सकते हैं (q.ExpiredDate> DateTime.अब)? उसे उन सभी पंक्तियों को वापस करना चाहिए जहां समाप्ति तिथि भविष्य की तारीख है। – Richard

उत्तर

8

यह काम नहीं करेगा?

QuestionnaireRepo.FindAll(
    q => (q.ExpiredDate == null) || (q.ExpiredDate > DateTime.Now)); 
+0

मैं सक्रिय प्रविष्टियों को वापस कर रहा हूं :) – Andrew

+0

@SocialAddict: क्या आप आवश्यक सटीक मानदंडों को स्पष्ट कर सकते हैं? आपका प्रश्न कहता है "जांचें कि कोई तिथि शून्य नहीं है ... और यदि यह उसकी पिछली तारीख नहीं है" जो वास्तव में मेरा कोड करता है (और कोड अब तक अन्य सभी उत्तरों में दिया गया है)। हालांकि, आपके प्रश्न में उदाहरण कोड ऐसा नहीं करता है! – LukeH

+0

अच्छी बात यह है कि, क्षमा करें :) – Andrew

2

इस है Linq करने वाली Sql या LINQ करने के लिए-संस्थाओं तो HasValue किसी SQL अभिव्यक्ति के लिए अनुवाद नहीं करेगा और आप एक अपवाद मिल जाएगा।

ऐसा करना चाहिए।

QuestionnaireRepo.FindAll(q => q.ExpiredDate != null && q.ExpiredDate <= DateTime.Now) 
1

कई तरीकों से ऐसा कर सकता है की एक जोड़ी है, एक अच्छा तरीका पाइप्स और फिल्टर का उपयोग कर, लेकिन कैसे आप ऊपर लागू कर रहे हैं पर ध्यान देकर आप तो इस पद्धति का उपयोग कर रहे हैं, यह नहीं दिखता है है इसमें नहीं जायेगा, लेकिन इसके गुमराह करने लायक है।

पाइप्स के साथ

और फ़िल्टर पैटर्न आप ऐसा कर सकता है:

 public static IQueryable<YourType> WithExpiryDate(this IQueryable<YourType> allMyTypes) 
     { 
      return allMyTypes.Where(f => f.ExpiredDate != null); 
     } 

     public static IQueryable<YourType> WhereExpiredDateBeforeThanNow(this IQueryable<YourType> allMyTypes) 
     { 
      return allMyTypes.Where(f => f.ExpiredDate <= DateTime.Now); 
     } 

और फिर बस जाओ: QuestionnaireRepo.FindAll().WithExpiryDate().WhereExpiredDateBeforeThanNow().SingleOrDefault();

आप, साथ ही कह सकते हैं:

QuestionnaireRepo.FindAll(q => q.ExpiredDate != null && q.ExpiredDate <= DateTime.Now); 

आशा इस मदद करता है ...

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