2010-09-27 12 views
6

मैं LINQ को SQL कथन बनाने की कोशिश कर रहा हूं जो फ़िल्टर को परिणाम देता है जहां आईडी पूर्णांक की कुछ सूची में नहीं है।LINQ से SQL जहां आईडी कुछ प्रविष्टियों में नहीं है

nextInvention = (from inv in iContext.Inventions 
        where !historyList.Contains(inv.Id) 
        orderby inv.DateSubmitted ascending 
        select inv).First<Invention>(); 

किसी भी विचार मैं कैसे हो सकता है: मैं .contains() विधि एसक्यूएल के लिए, लेकिन समझा के प्रयोजनों के लिए Linq में नहीं किया जा सकता का एहसास मुझे क्या करना चाहते हैं, उसके लिए, यहाँ मैं क्या करना चाहते हैं क्या है ऐसा करने के बारे में जाओ?

धन्यवाद!

उत्तर

16

Contains एसक्यूएल करने के लिए LINQ में इस्तेमाल किया जा सकता है ... यह प्रश्नों "में" की प्रस्तुति के सामान्य तरीका है। मेरे पास एक अस्पष्ट याद है कि कुछ प्रतिबंध हैं, लेकिन यह निश्चित रूप से काम कर सकता है। प्रतिबंध शामिल प्रकारों के आसपास हो सकते हैं ... historyListList<T> है? उदाहरण के लिए, शायद यह मनमाना IEnumerable<T> के लिए समर्थित नहीं है।

अब, मुझे नहीं पता कि परिणाम को निष्क्रिय करने से "इन नहीं" क्वेरी देने के लिए काम करता है, लेकिन यह कम से कम प्रयास करने योग्य है। क्या आपने अपने प्रश्न से सटीक क्वेरी की कोशिश की है? नोट करने के लिए

एक बिंदु: मुझे लगता है कि अगर आप प्रत्येक पंक्ति में एक खंड रखने की कोशिश की आपकी क्वेरी के पठनीयता में सुधार होगा:

var nextInvention = (from inv in iContext.Inventions 
        where !historyList.Contains(inv.Id) 
        orderby inv.DateSubmitted ascending 
        select inv) 
        .First(); 

भी ध्यान रखें कि इस मामले में, विधि वाक्य रचना यकीनन सरल है:

var nextInvention = iContext.Inventions 
          .Where(inv => !historyList.Contains(inv.Id)) 
          .OrderBy(inv => inv.DateSubmitted) 
          .First(); 
+0

धन्यवाद दोस्त! अच्छी तरह से काम। इसके अलावा, मेरे पास प्रति पंक्ति एक खंड पर था, मेरे naivete stackoverflow के मार्कअप में था^_^मैंने कोड को सही ढंग से घेर लिया नहीं था। किसी भी तरह चीयर्स :) – basicallydan