2017-03-08 7 views
5

क्या यह किसी इकाई पर orderby आभासी गुणों के लिए संभव है?इकाई ढांचे में ऑर्डरबी आभासी संपत्ति

मैं एक वर्ग के लिए इसी तरह की है:

"The specified type member 'TestName' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."

मैं मूल रूप से एक आंशिक वर्ग में विधि था, संपत्ति:

public int Id{get;set;} 
public string Name {get;set;} 

public virtual string TestName 
{ 
    get { return string.Format("{0}{1}", Name , Id); } 
} 

जब मैं TestName संपत्ति के द्वारा आदेश, मैं त्रुटि मिलती है डेटा लौटने में ऑर्डर नहीं किया जाता है लेकिन ऑर्डर नहीं किया जाता है।

क्या इसके आसपास कोई रास्ता है?

+0

मुझे संदेह है कि आपको केवल-पढ़ने या गैर मैप किए गए निर्दिष्ट करना होगा। – Schwarzie2478

+1

त्रुटि के पास 'आभासी' होने वाली संपत्ति से कोई लेना देना नहीं है। आपको त्रुटि मिलती है क्योंकि जिस संग्रह को आप 'ऑर्डरबी' कहते हैं, वह एक 'IQueryable ' है इसलिए ईएफ इसे ** एसक्यूएल ** बनाने की कोशिश करता है। चूंकि डीबी उस संपत्ति को नहीं जानता है, इसलिए यह इसके द्वारा आदेश नहीं दे सकता है। –

उत्तर

3

केवल .OrderBy(x => x.TestName) के बजाय आपको अपने ईएफ क्वेरी पर .ToList().OrderBy(x => x.TestName) का उपयोग करना होगा।

ऐसा इसलिए है क्योंकि TestName संपत्ति डेटाबेस तालिका में कॉलम के रूप में मौजूद नहीं है और क्वेरी को SQL कथन में परिवर्तित नहीं किया जा सकता है। .ToList() कॉल क्वेरी को C# संग्रह में पूरा कर देगा जिसे बाद में आदेश दिया जा सकता है।

+0

यह काम करेगा, लेकिन मैं इस वर्ग और ToList() होगा प्रदर्शन निहितार्थ का एक बड़ा संग्रह पर एक खोज प्रश्न करने के लिए कोशिश कर रहा हूँ –

1

आप एक अभिव्यक्ति पेड़ है, जो संस्थाओं को Linq मतलब है कि यह से एसक्यूएल उत्पन्न कर सकते हैं करने के लिए एक संपत्ति के अंदर कोड का विस्तार करने के DelegateDecompiler उपयोग कर सकते हैं।

https://github.com/hazzik/DelegateDecompiler

आप बस [Computed] विशेषता के साथ संपत्ति को सजाने के लिए, और .Decompile() LINQ क्वेरी के भाग के रूप कॉल करने के लिए की जरूरत है।

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