2012-04-13 11 views
7

मैं इस क्वेरी बुद्धि एक समूह में शामिल हैं:LINQ - 'शामिल खंड में अभिव्यक्तियों में से एक का प्रकार गलत है। 'GroupJoin' पर कॉल में अनुमान टाइप विफल रहा। '

foreach (var item in someList) 
    { 
        var result = (from t1 in someContext.Table1 
            join t2 in someContext.Table2 on new { t1.SomeID, item.SomeName} equals new {t2.SomeID, t2.SomeName} into j1 
            ... 
    } 

मुझे पता है कि अगर यह एक समूह के रूप में ऊपर में शामिल होने के लिए संभव है चाहते हैं?

new { t1.SomeID, item.SomeName} equals new {t2.SomeID, t2.SomeName} 

item.SomeName सूची से आता है जो मैं कर रहा हूं।

यदि नहीं, तो वांछित परिणाम प्राप्त करने के लिए मैं कथन कैसे बदलूं?

+0

संभव डुप्लिकेट: http://stackoverflow.com/questions/3020442/linq-joining-in-c-sharp-with-multiple-conditions –

उत्तर

19

बराबर अभिव्यक्ति के साथ उपयोग की जाने वाली गुणों के प्रकार मेल खाना चाहिए। तो उदाहरण के लिए Table1.SomeIDInt32 और Table2.SomeIDNullable<Int32> है, तो वे मेल नहीं खाते हैं।

संपादित

foreach (var item in someList) 
    { 
     var someName = item.SomeName; 
     var result = (from t1 in someContext.Table1 
        join t2 in someContext.Table2 on 
           new { t1.SomeID, SomeName = someName} 
         equals new { t2.SomeID, t2.SomeName} into j1 
            ... 
    } 

इसके अलावा item.SomeName जाँच इस मामले में t2.SomeName

के रूप में एक ही प्रकार
+0

वे यद्यपि से मेल करते हैं, लेकिन जब मैं 'item.omeName' को 't1.SomeName' में बदलता हूं, तो यह संकलित करता है ... तो क्या यह समस्या तब नहीं है? क्वेरी स्कोप के बाहर से किसी फ़ील्ड के साथ शामिल नहीं हो सकता है? – Willem

+0

मेरा अपडेट देखें कृपया –

+3

'कुछ नाम = कुछ नाम' ने चाल की है। धन्यवाद। =) – Willem

10

है आप यह सुनिश्चित करें कि गुण और दो नए गुमनाम वस्तुओं के प्रकार के होते हैं होना चाहिए वही। मैं आमतौर पर गुणों का विशिष्ट नाम देता हूं।

पूर्व .:

var result = from t1 in someContext.Table1 
       join t2 in someContext.Table2 on 
          new { SomeID = t1.SomeID, SomeName = someName} equals 
          new { SomeID = t2.SomeID, SomeName = t2.SomeName} into j1 
+0

कुंजी में शामिल होने के लिए समान नाम देने से कार्य किया गया था। काफी अजीब, प्रकार जहां मिलान कर रहे हैं। –

+1

ऐसा लगता है कि न केवल ऑर्डर और टाइप मैच होना चाहिए, बल्कि क्षेत्र/संपत्ति की तुलना में भी इसका नाम होना चाहिए। यदि आप तुलना कर रहे हैं उदा। नया {x.aid, x.zid} नया {y.aid, y.id} बराबर है, तो आपको दूसरे से मिलान करने के लिए केवल ज़िड या आईडी नाम चाहिए और सब कुछ संकलित होगा। उदाहरण के लिए: नया {x.aid, x.zid} नया बराबर है {y.aid, zid = y.id} – JBC

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