मैं इकाई की रूपरेखा सूची के लिए एक फिल्टर विधि बना सकते हैं और समझने की कोशिश कर रहा हूँ बेहतर Expression<Func<...
इकाई की रूपरेखा फ़िल्टर "अभिव्यक्ति <समारोह <T, bool>>"
मैं इस तरह के टेस्ट समारोह है।
public IQueryable<T> Filter<T>(IEnumerable<T> src, Expression<Func<T, bool>> pred)
{
return src.AsQueryable().Where(pred);
}
और अगर मैं ऐसा करते हैं:
context.Table.Filter(e => e.ID < 500);
या इस:
context.Table.Filter(e => e.SubTable.Where(et => et.ID < 500).Count() > 0 && e.ID < 500);
यह सब अच्छी तरह से काम करता है।
लेकिन अगर मैं ऐसा करते हैं:
context.Table.Where(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
मैं एक त्रुटि प्राप्त:
context.Table.Filter(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
या इस। LINQ to Entities does not recognize the method ...Filter...
यह एक मामले में क्यों काम करता है, न कि योजक में? संबंधित तालिकाओं के साथ काम करने के लिए फ़िल्टर में मुझे क्या बदलना चाहिए। मैं अन्य बाहरी पुस्तकालयों से दूर रहना पसंद करता हूं जैसा कि मैं चाहता हूं कि यह सीखना है कि यह कैसे काम करता है और भविष्य में किसी भी परिदृश्य में इसका उपयोग करने में सक्षम है।
पहले दो मामलों में फ़िल्टर डेटाबेस में सही ढंग से चलता है।
बहुत सारे पढ़ने और परीक्षण और त्रुटि से मुझे संदेह था कि यह एकमात्र तरीका था। क्या यह संदर्भ जैसे मामलों का काम करेगा। ठीक है। कहाँ (ई => e.subTable.Any (MyFilter())); –
@ पेड्रो.किड: नहीं, यह नहीं होगा। इस विधि का परिणाम बाहरीतम 'कहां' को पारित करने की आवश्यकता है, क्योंकि आप जो बाहरी अभिव्यक्ति को पार करते हैं, वह वास्तव में निष्पादित नहीं किया जाता है लेकिन इसका अर्थ है। –
मैंने एक परीक्षण किया और यह var filter = MyFilter() काम करता है; संदर्भ.Table.Where (ई => e.subTable.AsQueryable()। कोई भी (फ़िल्टर)); –