2010-03-05 19 views
6

पर वापस लौटने के लिए मानों की एक श्रृंखला निर्दिष्ट करने के लिए लैम्ब्डा अभिव्यक्ति का उपयोग करने में सक्षम होना चाहता हूं, मुझे यह नहीं पता कि यह संभव है ... लेकिन यह अच्छा होगा। सवाल यह है कि क्या यह संभव है लेकिन फिर संभव हो तो एक उदाहरण का थोड़ा सा।मैं एक wcf सेवा

मुझे यकीन नहीं है कि लैम्बडा अभिव्यक्ति को पारित करने के लिए आप किस विधि हस्ताक्षर का उपयोग करेंगे।

जैसे विधि IList<Group> GetGroups()

आप को कैसे संशोधित है कि यह में एक लैम्ब्डा अभिव्यक्ति पारित करने के लिए सक्षम होने के लिए चाहते हैं?

अगले सवाल यह है कि आप एक छड़ी पर सभी समूह वस्तुओं के लिए जहां उदाहरण के लिए

  • where .deleted == false या
  • where .DateAdded > aDate

हाँ, मैं चाँद चाहते वापस जाने के लिए एक लैम्ब्डा अभिव्यक्ति कोड होता है ;) अग्रिम धन्यवाद।

(संपादित करें मुझे लगता है कि यह वास्तव में डेटा एक्सेस लेयर की वजह से थोड़ा बीमार कल्पना है जो वास्तव में डेटा लाएगा ... लेकिन मान लीजिए कि आप सेवा पर कुछ ऑब्जेक्ट संग्रह पूछ रहे हैं और उन्हें नहीं करना है दाल के बारे में चिंता करें)।

उत्तर

7

आप प्रकार Expression<Func<Group, bool>> की एक पैरामीटर है, जो एक विधेय उस समूह में से मेल खाना चाहिए का प्रतिनिधित्व करता है के साथ GetGroups प्रणाली की घोषणा कर सकता है आदेश वापस करने:

IList<Group> GetGroups(Expression<Func<Group, bool>> predicateExpression); 

मुसीबत है, भाव, धारावाहिक नहीं किया जा सकता है ताकि आप इसे WCF सेवा के लिए नहीं भेज सकता है ... लेकिन, आप Expression Tree Serialization साथ यह करने के लिए एक तरह से मिल सकती है परियोजना।

+0

विन्ना दोनों धन्यवाद। पहले एक खेल के लिए कुछ लिखा है .... –

0

आप "predicate" पास कर सकते हैं: Func<Group, bool>, जो किसी दिए गए समूह के लिए सत्य या गलत देता है। चूंकि आप एक लैम्ब्डा जहां एक Func की उम्मीद है पारित कर सकते हैं, इस तरह हो सकता है कुछ:

var fooGroups = GetGroups(g => g.Name.StartsWith("Foo"));

+2

और आप डब्ल्यूसीएफ सेवा को भेजने के लिए प्रतिनिधि को क्रमबद्ध करने का इरादा कैसे रखते हैं? –

+0

चीयर्स;) मैं अभी भी समझ नहीं पा रहा हूं कि GetGroups का विधि हस्ताक्षर क्या होगा। –

+0

धन्यवाद, थॉमस - मेरा बुरा। –

1

मुझे लगता है कि आरआईए सेवाएं जो आप चाहते हैं वह करते हैं, लेकिन मुझे इसके पीछे जादू नहीं पता है।

2

आप

  • एक साधारण क्वेरी भाषा है कि अपने बैक-एंड सेवा समझता
  • वेब सेवा के लिए एक विधि है कि इस क्वेरी भाषा में एक स्ट्रिंग लेता
  • एक क्लाइंट-साइड रूपांतरण लिखने को उजागर करता है निर्धारित कर सकते हैं सिस्टम जो अभिव्यक्ति पेड़ से भरा IQueryable में लेता है, और उस भाषा में अनुवाद करता है
  • अब ग्राहक या तो आपकी क्वेरी भाषा में सीधे प्रश्न लिख सकता है, या LINQ क्वेरीज़ लिख सकता है जो आपका अनुवादक आपकी क्वेरी भाषा में बदल जाता है
  • अरे, आपने अभी LINQ-to-Tortoise का आविष्कार किया है!

मैट वॉरेन इस प्रकार की चीज कैसे करें इस बारे में seventeen blog articles है।

+0

lol linq-to-tortoise ... एक खतरनाक जानवर की तरह लगता है। मैं कस्टम स्क्रिप्टिंग भाषाओं से दूर शर्मिंदा हूं - आप बहुत अधिक नियंत्रण दे रहे हैं और भविष्य में बड़े मुद्दों का कारण बनने के लिए भीख मांग रहे हैं। लेकिन मैं IQueryable में बहुत कुछ देख रहा हूं ... धन्यवाद। –

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