मुझे AND
एस की बजाय OR
एस स्थितियों में बाएं से जुड़ने की आवश्यकता है। मुझे बाद के बहुत सारे नमूने मिल गए हैं लेकिन मेरे परिदृश्य के लिए सही जवाब पाने के लिए संघर्ष कर रहा हूं।लिंक - एकाधिक (OR) स्थितियों पर बाएं शामिल हों
from a in tablea
join b in tableb on new { a.col1, a.col2 } equals new { b.col1, b.col2 }
group a by a into g
select new() { col1 = a.col1, col2 = a.col2, count = g.Count() }
उन सभी जोड़ों के लिए बहुत अच्छा काम करता है जहां सभी शर्तों का मिलान होना चाहिए। मुझे on a.col1 = b.col1 OR a.col2 = b.col2
से मिलान करने के लिए शामिल होने की आवश्यकता है।
मुझे पता है कि यह आसान होना चाहिए लेकिन मैं इस पर खाली आ रहा हूं!
संपादित करें:
थोड़ी और जानकारी देने के लिए, क्वेरी करने के उद्देश्य से एक प्रक्षेपण 'एक' 'बी' में मिलान रिकॉर्ड की गिनती के साथ साथ से क्षेत्रों के सभी युक्त पाने के लिए है। मैंने ऊपर दिए गए नमूने में संशोधन किया है ताकि मैं कोशिश कर सकूं कि मैं क्या कर रहा हूं। जब मैं उपरोक्त के साथ दौड़ता हूं तो जॉन स्कीट ने ध्यान दिया है कि मुझे बी से संबंधित रिकॉर्ड की गिनती नहीं, सभी रिकॉर्डों की गिनती मिल रही है।
बुनियादी बाईं काम करता है में शामिल होने के ठीक:
from a in tablea
from b in tableb
.Where(b => (a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
select new { col1 = a.col1, col2 = a.col2 }
अगर मैं इस पर संशोधन के रूप में नीचे
from a in tablea
from b in tableb
.Where(b => (a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
group a by a.col1 into g
select new { col1 = g.Key, count = g.Count() }
मैं रिकॉर्ड की गिनती हो रही है समूह जोड़ने के लिए एक से लौटे - नहीं बी में मिलान में रिकॉर्ड की गिनती।
संपादित करें:
मैं जॉन का जवाब दे देंगे - मैं अपने गिनती समस्या हल हो जाती है - मैंने महसूस नहीं किया था मैं गिनती (g.Count(x => x != null))
फिल्टर करने के लिए एक lamda इस्तेमाल कर सकते हैं। इसके अलावा मुझे ऊपर की तरह एक के बजाय बी को समूहित करने की आवश्यकता है। यह सही परिणाम देता है लेकिन एसक्यूएल उतना कुशल नहीं है जितना मैं इसे हाथ से लिखूंगा क्योंकि यह एक सहसंबंधित उप क्वेरी जोड़ता है - अगर कोई निम्नलिखित एसक्यूएल को अनुकरण करने के लिए इसे लिखने का बेहतर तरीका सुझा सकता है तो मैं इसकी सराहना करता हूं!
select a.col1, count(b.col1)
from tablea a
left join tableb b
on a.col1 = b.col1
or a.col2 = b.col2
group by a.col1
मेरा सुझाव है कि आप समूह के बिना * मेरी क्वेरी * कोशिश करें, और देखें कि क्या आपको उम्मीदें मिल रही हैं या नहीं। यदि ऐसा होता है, तो समूहिंग विफल होने का कारण बनने का प्रयास करें। शायद 'नया {a.col1, a.col2}' द्वारा समूह? –
एक मूल बाएं शामिल होने के रूप में ठीक काम करता है - ग्रुपिंग से गिनती प्राप्त करना व्यवहार नहीं कर रहा है क्योंकि मुझे उम्मीद है कि यह मूलभूत इक्विटी-इन होगा। ऊपर अतिरिक्त जानकारी नोट करें। –