मुझे एक समस्या थी जहां मैंने अपने डेटा स्रोत को बाइंडिंगसोर्स से एक इकाई फ्रेमवर्क क्वेरी में बदल दिया।
var query = dataSource as IQueryable;
var value = query.Where("prop = @0", value).Cast<object>().SingleOrDefault();
इकाई ढांचे के साथ यह 'ऑब्जेक्ट' टाइप करने के लिए 'ग्राहक' प्रकार को कास्ट करने में असमर्थ है। LINQ से संस्थाएं केवल ईडीएम आदिम या गणना प्रकार कास्टिंग का समर्थन करती हैं।
वह वर्ग जहां मेरा कोड मॉडल के साथ lib के संदर्भ में नहीं था, इसलिए ...Cast<customer>
संभव नहीं था।
वैसे भी मैं एक IEnumerable विस्तार जो प्रतिबिंब
public static object SingleOrDefault(this IEnumerable enumerable, Type type)
{
var method = singleOrDefaultMethod.Value.MakeGenericMethod(new[] { type });
return method.Invoke(null, new[] { enumerable });
}
private static Lazy<MethodInfo> singleOrDefaultMethod
= new Lazy<MethodInfo>(() =>
typeof(Extensions).GetMethod(
"SingleOrDefault", BindingFlags.Static | BindingFlags.NonPublic));
private static T SingleOrDefault<T>(IEnumerable<T> enumerable)
{
return enumerable.SingleOrDefault();
}
प्रकार प्रति कैशिंग को लागू करने के प्रदर्शन में सुधार करने के लिए स्वतंत्र महसूस का उपयोग करता है के साथ इस दृष्टिकोण
var query = dataSource as IQueryable;
var targetType = query.GetType().GetGenericArguments()[0];
var value = query.Where("prop = @0", value).SingleOrDefault(targetType);
संयोजन के रूप में इस्तेमाल किया।
स्रोत
2017-09-07 15:44:20
आप जेनेरिक 'आईनेमरेबल' का उपयोग क्यों नहीं करते हैं, इसलिए 'छविसूची' 'IENumerable 'से प्राप्त हो सकती है? –
@ अरनिस: क्योंकि ImageMagick.net लाइब्रेरी में ImageLIst defien ... :) –