2016-08-25 11 views
5

निम्नलिखित कोड काम करता है नहीं पहचानता है:LINQ विधि 'Newtonsoft.Json.Linq.JToken get_Item (System.String)' विधि,

string data = Encoding.UTF8.GetString(eventData.GetBytes()); 
JObject o = JObject.Parse(data); 

var disp = db.Dispositivos 
    .Where(p => p.ClaveDispositivo == "UM5WOkRIFtS9dWbM5f1YM/ncpdrpSYrh3zND9Y/YHM4="); 

if(disp.ToList().Count > 0) 
{ 
    // ... 

हालांकि जब मैं बजाय एक चर का उपयोग करने का प्रयास करें हार्ड कोडित मूल्य:

string data = Encoding.UTF8.GetString(eventData.GetBytes()); 
JObject o = JObject.Parse(data); 

var disp = db.Dispositivos 
    .Where(p => p.ClaveDispositivo == o["deviceKey"].ToString()); 

if(disp.ToList().Count > 0) 
{ 
    // ... 

मैं इस त्रुटि मिलती है:

LINQ to Entities does not recognize the method 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' method.

उत्तर

1

समस्या बहुत अच्छी तरह से उत्कृष्टता के संदेश द्वारा वर्णित है ption। मूल रूप से इकाई की रूपरेखा नहीं कर सकते (संस्थाओं ESQL को तब्दील हो जाता है करने के लिए LINQ) एसक्यूएल में अनुवाद

समाधान .ToList() कॉल करने के लिए इससे पहले कि आप Where

पी एस का उपयोग करें हाँ, मुझे पता है कि यह बहुत अच्छा नहीं है, क्योंकि यह सबकुछ स्मृति में लोड करेगा।

10

संदेश काफी आत्म-व्याख्यात्मक है। आपकी Where कॉल में पारित अभिव्यक्ति को बाद में ईएफ द्वारा एसक्यूएल में अनुवादित किया गया है। ईएफ को कोई जानकारी नहीं है कि JToken पर एक संपत्ति इंडेक्सर का अनुवाद कैसे करें, इसलिए यह विफल हो जाता है।

आप अभिव्यक्ति के बाहर मूल्य प्राप्त करके इसके आसपास काम कर सकते हैं। इसे आपके लैम्ब्डा में संदर्भित करने से परिणामस्वरूप अभिव्यक्ति में 'स्थिर' होगा।

var deviceKey = o["deviceKey"].ToString(); 

var disp = db.Dispositivos 
    .Where(p => p.ClaveDispositivo == deviceKey); 

एक के रूप में अलग रूप में, आपको बुला रहा disp.Any() (या Any साथ Where की जगह) अगर है कि तुम सब की जांच करना चाहते है बेहतर होगा। ToList पर कॉल करने से परिणामस्वरूप सभी डेटा पुनर्प्राप्त किए जाएंगे और केवल इसके लिए अनदेखा किया जाएगा।

0

उपयोग प्रतिनिधि:

var disp = db.Dispositivos.Where(delegate(Dispositivos p) 
{ 
    return p.ClaveDispositivo == o["deviceKey"].ToString(); 
}); 
संबंधित मुद्दे