2012-04-17 12 views
12

मैं गतिशील LINQ WHERE कथन है:System.Linq.Dynamic - मैं में खंड में उपयोग कर सकते WHERE कथन

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ..."); 

मैं करने के लिए बदल हैं:

dataContext.Table.Where("id IN (0, 1, 2, ...)"); 

लेकिन यह काम नहीं। मैं बेहतर प्रदर्शन के लिए यह कैसे कर सकता हूं?

उत्तर

10

How to use “contains” or “like” in a dynamic linq query?

//edit: this is probably broken, see below 
ids = new int[] {1,2,3,4}; 
dataContext.Table.Where("id.Contains(@0)", ids); 

तरफ से: यह गतिशील LINQ भाव में प्लेसहोल्डर का उपयोग करने के अच्छी आदत है।

वास्तव में मुझे लगता है कि मैं इस में गड़बड़: नहीं तो आप अपने आप को LINQ इंजेक्शन हमले (Is Injection Possible through Dynamic LINQ?)


संपादित करने के लिए खोल सकता है। दुर्भाग्यवश मैं इस समय इसका परीक्षण नहीं कर सकता। लेकिन मुझे लगता है कि इस मामले में सही वाक्यविन्यास dataContext.Table.Where("@0.Contains(id)",ids); होना चाहिए, दूसरी तरफ नहीं, और वह संस्करण आउट-ऑफ़-द-बॉक्स काम करता है।

इस कार्यक्षमता को गतिशील लिंक में जोड़ने के लिए here देखें। इसके लिए आपको पुस्तकालय को संशोधित करने की आवश्यकता है।

5
var ids = new int[] {1,2,3,4}; 
dataContext.Table.Where(f => ids.Contains(f.id)) 
+1

धन्यवाद, मैं यह जानता हूँ, लेकिन कॉलम नाम "आईडी" बदल रहा है। मुझे इस कॉलम को द्विपक्षीय रूप से मिलता है। तो मैं स्थिर लिंक का उपयोग नहीं कर सकता। मुझे स्ट्रिंग के लिए गतिशील लिनक लाइब्रेरी का उपयोग करना है जहां उदाहरण के रूप में क्लॉजूल है। [गतिशील लिंक] (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) –

+1

@Ingenu , संसाधन पढ़ें और आपको पता चलेगा कि डायनामिक लिंक किस बारे में है –

2

ऐसा लगता है कि System.Linq.Dynamic के संस्करण 1.0.4 में, हम निम्न सिंटैक्स dataContext.Table.Where("@0.Contains(outerIt.id)",ids); उपयोग कर सकते हैं के रूप में यह किया गया था और पहले से ही उद्धृत ब्लॉग में प्रस्तुत किया: here

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