में एक से अधिक कुल कॉलम लौटें मैं LINQ में निम्नलिखित एसक्यूएल अनुवाद करना चाहते हैं:LINQ
SELECT
(Select count(BidID)) as TotalBidNum,
(Select sum(Amount)) as TotalBidVal
FROM Bids
मैं इस की कोशिश की है:
from b in _dataContext.Bids
select new { TotalBidVal = b.Sum(p => p.Amount), TotalBidNum = b.Count(p => p.BidId) }
लेकिन एक त्रुटि "बोलियां प्राप्त एक शामिल नहीं है "Sum" के लिए परिभाषा और "बिड्स" प्रकार के पहले तर्क को स्वीकार करने वाला कोई एक्सटेंशन विधि "Sum" पाया जा सकता है।
मैं LINQ में यह कैसे कर सकता हूं?
धन्यवाद
समापन:
अंतिम जवाब था:
var ctx = _dataContext.Bids;
var itemsBid = (from b in _dataContext.Bids
select new { TotalBidVal = ctx.Sum(p => p.Amount), TotalBidNum = ctx.Count() }).First();
का उपयोग कर त्रुटि का समाधान (हालांकि यह एक अनावश्यक कदम की तरह लगता है था कि द्वारा समानांतरवाद से benfit सकता है - क्यों है इसकी आवश्यकता है?)। मेरी गणना के साथ एक समस्या थी (पी => पी। बिडआईडी) - एक त्रुटि है कि पी। बिडआईड बुलियन नहीं था। मैंने इसे गणना() के साथ बदल दिया और अब क्वेरी सही राशि देता है और गिनती है लेकिन एक पंक्ति के रूप में नहीं। एक ही पंक्ति में और अधिक - मैं बोलियां तालिका में पंक्तियों के रूप में कई बार मानता हूं। मैं अपनी मूल SQL क्वेरी में एक पंक्ति कैसे वापस कर सकता हूं? – BKahuna
@BKahuna आपकी क्वेरी कहती है "बी से _dataContext.Bids" में एक पुनरावृत्ति है। और आपको एक परिणाम नहीं मिलेगा भले ही आप केवल योग और गणना करने की कोशिश कर रहे हों। आप पहले() को कॉल करके लैम्ब्डा अभिव्यक्ति को समाप्त कर सकते हैं। जो आपको केवल एक परिणाम देगा जैसा मैंने किया है। – scartag
@BKahuna कृपया मेरे उत्तर को अंत तक स्क्रॉल करें और अंतिम कॉल देखें। मैं पहली() विधि को कॉल करता हूं जो सुनिश्चित करेगा कि मुझे केवल एक पंक्ति वापस मिल जाएगी (एसक्यूएल जेनरेट किया गया है शीर्ष (1)) – scartag