2010-10-21 18 views
5

मैं एंटरप्राइज़ लाइब्रेरी का उपयोग कर रहा हूं। मैं कॉलम (पूर्णांक प्रकार का) एनम टाइप में मैप करना चाहता हूं।सी # लैम्ब्डा अभिव्यक्ति एकाधिक स्थितियों का मानचित्रण

कहने के लिए सी # प्रकार के (कक्षा कर्मचारी) गुण

Enum BloodGroup Type 
{ 

    OPositive, 
    ONegative, 
    ABPositive, 
    ABNegative, 
    BPositive, 
    BNegative, 
    NotSet 
} 

मैं मानचित्रण हूँ डाटाबेस टेबल के स्तंभ।

IRowMapper<Employee> addressMapper = MapBuilder<Employee> 
       .MapAllProperties() // map all properties 
       .Map(p=>p.BloodGroup) // override BloodGroup property 
       .WithFunc(rec => rec.IsDBNull(rec.GetOrdinal("BloodGroup")) 
       ? BloodGroup.NotSet 
       : BloodGroup.OPositive) 
       .Build(); 

कोड ठीक काम कर रहा है लेकिन मैं WithFun विस्तार में Enum के कई हालत मैप करने के लिए Method.I मतलब

.WithFun(rec=> rec.IsDBNull(rec.GetOrdinal("BloodGroup")) ? BloodGroup.NotSet 
       rec.GetOrdinal("BloodGroup")==1 ?BloodGroup.OPositive 
       rec.GetOrdinal("BloodGroup")==2 ?BloodGroup.ONegative 
     ) 

की तरह कुछ मुझे कई की स्थिति की जांच करने के लिए मदद करना चाहते हैं?

+0

क्या यह NHibernate ??? – Aliostad

+0

कोई एंटरप्राइज़ लाइब्रेरी 5.0 – IExtensible

उत्तर

2
rec.IsDBNull(rec.GetOrdinal("BloodGroup")) ? BloodGroup.NotSet : 
rec.GetOrdinal("BloodGroup")==1 ? BloodGroup.OPositive : 
rec.GetOrdinal("BloodGroup")==2 ? BloodGroup.ONegative : 
BloodGroup.NotSet 

आपको कुछ कोलन और अंतिम अभिव्यक्ति अभिव्यक्ति जोड़ने की आवश्यकता है। ternary operator देखें।

+0

हाँ यह ठीक काम कर रहा है – IExtensible

1

उपयोग

.WithFunc((rec) => { 
if(rec.IsDBNull(rec.GetOrdinal("BloodGroup")) 
    return BloodGroup.NotSet; 
else if(rec.GetOrdinal("BloodGroup")==1) 
    return BloodGroup.OPositive; 
else if(rec.GetOrdinal("BloodGroup")==2) 
    return BloodGroup.ONegative; 
    ..... // you get the idea   
}) 
. // rest 

मूल रूप से आप अपने कार्य को परिभाषित करने के घुंघराले ब्रेसिज़ उपयोग कर सकते हैं। वैकल्पिक रूप से आप एक फ़ंक्शन बना सकते हैं और इसे Func में उपयोग कर सकते हैं।

+0

आपको बहुत धन्यवाद – IExtensible

1

ऐसा कुछ करने का प्रयास करें। इस कोड का उपयोग करके, आप एक अज्ञात फ़ंक्शन बनाते हैं जिसे केवल एक बार रिकॉर्ड को स्पर्श करना होता है, जिससे आसपास की दक्षता बढ़ जाती है। यदि आप लैम्ब्डा कास्टिंग और आविष्कार से परिचित हैं, तो इसे पढ़ना भी आसान है। इस लैम्ब्डा को सामान्य इंट-टू-एनम फ़ंक्शन में सार करना इष्टतम होगा।

.WithFun(rec => ((Func<BloodGroup, int>) 
    (i => 
     { 
      if(rec.IsDBNull(i)) return BloodGroup.NotSet; 
      switch(i) 
      { 
       case 1: 
        return BloodGroup.OPositive; 
       case 2: 
        return BloodGroup.ONegative; 
       // More cases... 
       default: 
        return BloodGroup.NotSet; 
      } 
     })).Invoke(rec.GetOrdinal("BloodGroup"))) 
संबंधित मुद्दे