2012-04-12 35 views
11

यहाँ में अनुवाद नहीं किया जा सकता है कि मैं क्या करने की कोशिश कर रहा हूँ है Int32 में कनवर्ट करने के लिए क्योंकि List<int> को वापस करने के लिए विधि List<int?> वापस नहीं कर सका।LINQ एक दुकान अभिव्यक्ति

इस साधारण समस्या को हल करने के तरीके पर कोई सुझाव?

+0

मुझे लगता है कि 'Convert' कार्यों संस्थाओं को LINQ साथ काम नहीं करेंगे, तो यह आपको एक' db.AccountRules कर सकता है कि संभव है। AsNumerable() 'और फिर बाकी – V4Vendetta

उत्तर

19
इसके बजाय इस बात का

:

Select(a => Convert.ToInt32(a.RoleId)) 

यह करें:

Select(a => a.RoleId.Value) 

कारण त्रुटि विवरण में है; जब आप IQueryable के माध्यम से इन प्रश्नों को कर रहे हैं, तो चयनकर्ता के भीतर उपयोग की जाने वाली विधियों को ऐसा कुछ होना चाहिए जिसे SQL क्वेरी या फ़ंक्शन में अनुवादित किया जा सके। इस मामले में Convert.ToInt32() ऐसी कोई विधि नहीं है। int फ़ील्ड null के साथ, .NET .Value संपत्ति का उपयोग करने की अनुमति है, हालांकि।

ध्यान दें कि यह RoldIdnull है, तो यह काम नहीं करेगा। आपको InvalidOperationException मिल जाएगा। आप एक निर्धारित मूल्य पर लौटने के लिए बजाय अगर समर्थन फ़ील्ड रिक्त है चाहते हो सकता है:

Select(a => a.RoleId.HasValue ? a.RoleId.Value : int.MinValue) 

यह मान वापस आ जाएगी अगर वहाँ एक है, और int.MinValue अगर नहीं है।

5

इस का उपयोग करें: चुनें (एक => (int) a.RoleId)

+0

यह मेरे लिए काम किया। @ एंड्रयूबार्बर का जवाब नहीं था। धन्यवाद muthuvel। – user2330678

+0

हाँ यह एक काम करता है जहां दूसरों ने नहीं किया - धन्यवाद – Lyall

0

db.Accounts से सूची वस्तु लेने के लिए और सामान करने की कोशिश। यह मेरे लिए काम करता है।

public List<int> GetRolesForAccountByEmail(string email) 
{ 
    var account = db.Accounts.SingleOrDefault(a => a.Email == email); 
    if (account == null) return new List<int>(); 
    return db.AccountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList(); 
} 
इसके बजाय इस बात का

, कोशिश यह ..

public List<int> GetRolesForAccountByEmail(string email) 
    { 
    var account = db.Accounts.SingleOrDefault(a => a.Email == email); 
    if (account == null) return new List<int>(); 
    List<AccountRoles> accountRoles= db.AccountRoles.ToList<AccountRoles>(); 
    return accountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList(); 
    } 
संबंधित मुद्दे