2011-06-23 12 views
8

लिंक क्वेरी "ऑर्डर बाय" काम नहीं कर रहा है और मैंने आपकी साइट और अन्य साइटों पर मिले सभी सुझावों का पालन किया है। किसी भी तरह की सहायता की सराहना की जाएगी।लिंक आदेश

[WebGet] 
    public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted) 
    { 
     var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
         where p.submitted == submitted 
         orderby p.fullname 
         select p); 
     return results; 
    } 

आपके इनपुट के लिए धन्यवाद!

हां, यह एक डब्ल्यूसीएफ डेटा सेवा के लिए एक वेबगेट विधि है। अगर मैं एक IQueryable प्रकार नहीं लौटाता तो मुझे 400 त्रुटि मिलती है, इसलिए मैंने आपके सुझाव को थोड़ा सा संशोधित किया। दुर्भाग्यवश, यह अभी भी किसी आदेश द्वारा उपेक्षा करता है।

[WebGet] 
public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted) 
{ 
    var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
        where p.submitted == submitted 
        orderby p.fullname 
        select p).ToArray(); 
    results.OrderBy(p => p.patientname); 
    return results; 
} 
+3

आपका क्या मतलब है "काम नहीं कर रहा है?" आप क्या उम्मीद करते हैं, और यह क्या कर रहा है? – jason

+0

कृपया बताएं कि "काम नहीं कर रहे" से आपका क्या मतलब है। – devuxer

+0

आपके द्वारा प्राप्त किए जा रहे परिणामों के बारे में अप्रत्याशित क्या है? कोशिश करें। OderBy (पी => p.fullname); – esastincy

उत्तर

19

मैं तुम्हें वापस जाने के नोटिस एक IQueryable<T> - इससे पहले कि आप की गणना आप परिणाम पर कोई LINQ तरीकों बुला रहे हैं?

Not all LINQ methods preserve order। सबसे अधिक, के बाद कॉल करने से आप आदेश को नष्ट कर देंगे।

+2

के डे लौटाए गए मूल्य को बदलना होगा अलग() से संबंधित टिप्पणी के लिए धन्यवाद जो मेरे लिए समस्या पैदा कर रहा है। समाधान यहां पाया गया है [लिंक] (http://stackoverflow.com/questions/12428985/distinct-and-orderby-issue) – mack

1

चूंकि आपकी विधि वेबगेट विशेषता के साथ चिह्नित है, इसलिए मुझे लगता है कि आप इस विधि को वेब एंडपॉइंट से कॉल कर रहे हैं, इसलिए आपको इंटरनेट के माध्यम से इसे भेजने से पहले संग्रह को पतन करने की आवश्यकता हो सकती है।

प्रयास करें:

[WebGet] 
public vw_providercharge_providers[] GetChargeProviders(int submitted) 
{ 
    var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
        where p.submitted == submitted 
        orderby p.fullname 
        select p).ToArray(); 
    return results; 
} 

इस तरह आप गारंटी है कि GetChargeProviders विधि रिटर्न और सरणी के बजाय एक LINQ अभिव्यक्ति।

सम्मान,

1

मुझे इस मुद्दे का कारण मिला।

मैंने "vw_providercharge_providers" डेटा मॉडल इकाई के लिए "पूर्णनाम" कॉलम को एंटीटी कुंजी के रूप में सेट नहीं किया था। केवल पहचान कॉलम को एंटीटी कुंजी के रूप में सेट किया गया था। मुझे एहसास नहीं हुआ कि खंड द्वारा क्रम में इसका उपयोग करने की आवश्यकता थी।

आपके इनपुट के लिए फिर से धन्यवाद।

+3

यह सही नहीं है। ऑर्डरबी विधि के लिए डेटा मॉडल के भीतर एक कॉलम को एंटीटी कुंजी के रूप में परिभाषित नहीं किया जाना चाहिए। मुझे संदेह है कि आप अपने डेटा मॉडल (या गलत तरीके से) में जिस तरीके से अपना दृश्य स्थापित कर रहे हैं, उसके कारण आप कुछ अजीब व्यवहार में भाग ले रहे हैं। मुझे संदेह है कि "पूर्णनाम" कॉलम जोड़ने के कारण एंटीटी कुंजी अब आपके कॉलम द्वारा ऑर्डर करने के लिए आपके परिणामों को मजबूर कर रही है चाहे आप विशेष रूप से अपने linq क्वेरी में ऑर्डरबी का उपयोग करें या नहीं। मैं विभिन्न स्तंभों द्वारा आदेश देता हूं जो मेरे डेटा संदर्भ (इकाई फ्रेमवर्क) में विचारों के भीतर कुंजी नहीं हैं और यह उन्हें ठीक से आदेश देता है। – Jagd

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