बस इस में भाग गया। मेरे मामले में मुद्दा यह है कि क्वेरी में एक है। चयन करें() खंड जो आगे के रिश्तों को स्थापित करने का कारण बनता है जो क्वेरी को फ़िल्टरिंग को समाप्त करता है क्योंकि रिश्तेदार आंतरिक शामिल होने से परिणाम में बाधा आती है।
ऐसा प्रतीत होता है कि .Count() क्वेरी का चयन नहीं करता है। क्वेरी का चयन करें।
तो मेरे पास है:
// projection created
var ordersData = orders.Select(ord => new OrderData() {
OrderId = ord.OrderId,
... more simple 1 - 1 order maps
// Related values that cause relations in SQL
TotalItemsCost = ord.OrderLines.Sum(lin => lin.Qty*lin.Price),
CustomerName = ord.Customer.Name,
};
var count = ordersData.Count(); // 207
var count = ordersData.ToList().Count // 192
जब मैं SQL कथन की तुलना मुझे लगता है कि गणना() को खोजने के आदेश तालिका जो सभी आदेशों रिटर्न पर एक बहुत ही सरल योग करता है, जबकि दूसरा क्वेरी 100 का एक राक्षस है एसक्यूएल है कि 10 भीतरी मिलती है कि .Select() खंड द्वारा ट्रिगर कर रहे की तर्ज + (वहाँ कुछ और संबंधित मूल्यों/एकत्रित यहाँ दिखाया गया है की तुलना में लिया गया हैं)।
असल में यह इंगित करता है कि .उंट() यह नहीं लेता है। चयन() क्लॉज खाते में जब यह गिनती करता है, तो वे वही रिश्ते जो परिणाम सेट को और बाधित करते हैं, को काउंटर के लिए नहीं निकाल दिया जाता है।()।
मैं स्पष्ट रूप से और साथ ही विधि .Count() कि जो प्रभावी रूप से उन्हें .Count (में बल से उन समग्र परिणाम मूल्यों के कुछ में खींचने के लिए) क्वेरी भाव जोड़कर इस काम करने के लिए सक्षम किया गया है:
var count = ordersData.Count(o=> o.TotalItemsCost != -999 &&
o.Customer.Name != "[email protected]#"); // 207
कुंजी सुनिश्चित करें कि फ़ील्ड गणना कर रहे हैं या आग संबंधित डेटा में खींच सकते हैं और एक रिश्ते के कारण के किसी भी, अभिव्यक्ति जो गणना() ने अपने प्रश्न में आवश्यक रिश्तों शामिल करने के लिए मजबूर करता में शामिल हैं बनाने के लिए है।
मुझे एहसास है कि यह एक कुल हैक है और मुझे उम्मीद है कि एक बेहतर तरीका है, लेकिन इस पल के लिए इसने हमें कम से कम डेटा खींचने के बिना सही मूल्य प्राप्त करने की अनुमति दी है। टोस्टिस्ट() पहले।
स्रोत
2013-09-26 04:45:20
efQuery IENumerable या IQueryable है? इसके अलावा यदि आप अपना वास्तविक कोड पोस्ट कर सकते हैं जो मदद करेगा। – Maess
efQuery 'IQueryable' है, यह एक क्वेरी है जिसे अभी तक डेटाबेस के विरुद्ध निष्पादित नहीं किया गया है। मैंने कोड जोड़ा है। – ReFocus