मैं संबंधित इकाइयों के उप-समूह में नेविगेशन प्रॉपर्टी फ़िल्टर करने के लिए लिंक का उपयोग करके एक रास्ता खोजना चाहता हूं। मैं इस विषय के आसपास सभी जवाब पता जैसे एक गुमनाम चयनकर्ता का सुझाव देते हैं:EntityFramework 5 फ़िल्टर एक शामिल नेविगेशन प्रॉपर्टी
query.Where(x => x.Users.Any(y => y.ID == actingUser.ID))
.Select(x => new
{
Event = x,
Discussions = x.Discussions.Where(actingUser.GenerateSecurityFilterFor<Domain.Discussion>())
})
.OrderBy(x => x.Discussions.Count())
.ThenBy(x => x.Event.Name);
बहरहाल, यह हमारे क्वेरी पीढ़ी के सामान्य प्रकृति के कारण आदर्श तुलना में काफी कम है और यह भी काफी भीषण एसक्यूएल प्रश्नों पैदावार यदि आप ऊपर फेंक प्रोफाइलर।
मैं की तरह कुछ हासिल करने के लिए सक्षम होने के लिए करना चाहते हैं:
query.Include(x => x.Discussions.Where(actingUser.GenerateSecurityFilterFor<Domain.Discussion>()))
.OrderBy(x => x.Discussions.Count())
.ThenBy(x => x.Name);
मुझे लगता है कि इस EF5 (या उस बात के लिए किसी भी संस्करण) में समर्थित नहीं है लेकिन वहाँ बाधित पूरा करने के लिए एक तरह से हो गया है परिणाम अज्ञात प्रकार के चयन बयान में डेल किए बिना लिंक के माध्यम से सेट किया गया।
मैं की धुन के लिए कुछ कर रही प्रयास किया है:
query.GroupJoin(discquqery,
x => x.ID,
x => x.Event.ID,
(evt, disc) => evt.Discussions = disc.Where(actingUser.GenerateSecurityFilterFor<Domain.Discussion>())).ToList();
हालांकि आप एक लैम्ब्डा अभिव्यक्ति के अंदर काम नहीं हो सकता है और यहाँ एक गुमनाम प्रकार का चयन एक ही दुविधा है कि यह चयन का उपयोग करता है का कारण बनता है।
मुझे लगता है मैं समझ नहीं सकता क्यों एफई (है कि मैं पा सकते हैं) उत्पन्न करने के लिए एक तरीका प्रदान नहीं करता है:
SELECT
--Properties
FROM Event e
LEFT OUTER JOIN Discussions d
ON e.ID = d.EventID AND --Additional constraints
WHERE
--Where conditions
ORDER BY
--Order Conditions
यह करने के लिए एक रास्ता एसक्यूएल में वहाँ है, शामिल विवश करने के लिए बहुत आसान है यह लिंक के माध्यम से भी।
पीएस: मैंने स्टैक, एमएसडीएन, विशेषज्ञों-विनिमय आदि की खोज की है। कृपया महसूस करें कि यह एक डुप्लिकेट नहीं है। इस विषय पर छूने वाला कुछ भी या तो एक पुलिस-आउट है "यह नहीं किया जा सकता" उत्तर या कोई जवाब नहीं है। इसमें कुछ भी असंभव नहीं है ...
ठीक है, यहां एक "यह किया जा सकता है" उत्तर है: http://stackoverflow.com/a/13904825/861716 –
ईएफ में क्वेरी पीढ़ी इंजन का विस्तार करने के तरीके हैं। तो यह असंभव नहीं है, और यदि यह एकमात्र मार्ग है तो उत्तर ईएफ क्वेरी इंजन का विस्तार है ताकि INNER/बाहरी जॉइन को अतिरिक्त फ़िल्टर शामिल करने की अनुमति मिल सके। कुछ भी असंभव नहीं है ... अगर मुझे ईएफ को दोबारा जोड़ना है तो मैं ... यह एक मौजूदा उत्तर नहीं दे रहा है इसका मतलब है कि इसका उत्तर स्वयं बना रहा है (जो मैं वर्तमान में और यहां तक कि जब मैंने सवाल पूछा, तो करने की योजना बनाई) – VulgarBinary
यही है आत्मा!! –