2010-03-30 11 views

उत्तर

28

मुझे सभी संभावित LINQ प्रश्नों को उत्पन्न करने के संबंध में nHibernate की स्थिति नहीं पता है, लेकिन आप IN उत्पन्न करने के लिए .Contains() का उपयोग करने में सक्षम होना चाहिए।

var list = new int[] { x, y, x }; 
var q = db.Entities.Where(e => list.Contains(e.AnID)); 
+0

हाँ, NHibernate 3.1.0 जीए साथ काम करता है –

3

सहमत है, यह काम करता है। मैं 'नहीं' में हालांकि अजीब होने के लिए (3.3.0 के रूप में जीए)

... 
from 
    mytable t0_ 
where 
    case 
    when t0_.testValue in (
       @p0 , @p1 , @p2 
     ) then 1 
      else 0 
    [email protected] 
@p0 = 9 [Type: Int32 (0)], 
@p1 = 99 [Type: Int32 (0)], 
@p2 = 109 [Type: Int32 (0)], 
@p3 = False [Type: Boolean (0)], 
... 

एक सा 'मामले' को यह अजीब लगता है जब 'नहीं' में स्पष्ट हो गया होता (के लिए नहीं है कि उत्पन्न एसक्यूएल पाया मैं हर पंक्ति को पढ़ने की योजना बना रहा हूं, लेकिन शायद एक ट्रेस/प्रोफाइल में)।

(... बाद में उस दिन ...)

मैंने महसूस किया कि एसक्यूएल के ऊपर 'अजीब' विकल्प केवल जब मैं

.Where(e => list.Contains(e.AnID) == false) 

इस्तेमाल किया था अगर मैं

.Where(e => !list.Contains(e.AnID)) 
इस्तेमाल किया

एसक्यूएल उत्पन्न बहुत क्लीनर है ('इन इन' का उपयोग करके)

0

एनएचबेर्नेट के पास RestrictionEx का IsIn हिस्सा है तनाव

एक्स => x.Name.IsIn (नई [] { "एक", "बी"})

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