ठीक है, मुझे लगता है कि यदि आप वास्तव में ऐसा करना चाहते हैं, तो आप अपने खुद के अभिव्यक्ति बनाने की कोशिश कर सकते। मुझे लगता है कि आपके पास मूल इकाई वर्ग है जो सामान्य है और यही वह जगह है जहां सामान्य कुंजी संपत्ति आती है। मैंने उस वर्ग को नाम दिया है KeyedEntityBase<TKey>
, TKey
कुंजी का प्रकार है (यदि आपके पास ऐसी कक्षा नहीं है, तो यह ठीक है, केवल एक चीज जिसे मैंने उपयोग किया है वह सामान्य बाधा है)। तो फिर तुम अपने आप को अभिव्यक्ति का निर्माण करने के लिए इस तरह एक विस्तार विधि बना सकते हैं:
public static class Extensions
{
public static IQueryable<TEntity> WhereIdEquals<TEntity, TKey>(
this IQueryable<TEntity> source,
Expression<Func<TEntity, TKey>> keyExpression,
TKey otherKeyValue)
where TEntity : KeyedEntityBase<TKey>
{
var memberExpression = (MemberExpression)keyExpression.Body;
var parameter = Expression.Parameter(typeof(TEntity), "x");
var property = Expression.Property(parameter, memberExpression.Member.Name);
var equal = Expression.Equal(property, Expression.Constant(otherKeyValue));
var lambda = Expression.Lambda<Func<TEntity, bool>>(equal, parameter);
return source.Where(lambda);
}
}
और फिर, आप इसे इस तरह (एक पूर्णांक कुंजी प्रकार के लिए) का उपयोग कर सकते हैं:
context.Set<MyEntity>.AsNoTracking().WhereIdEquals(m=>m.Id, 9).ToList();
स्रोत
2017-09-14 16:40:00
"* मैं सिर्फ कर सकते हैं 'टी * "एक लागू दावे नहीं है जब तक कि आप हमें दिखा सकें कि आप क्यों नहीं कर सकते। एसओ समुदाय के ज्ञान को देखते हुए, शायद आप कर सकते हैं, आप अभी नहीं जानते ** कैसे **। – Tommy
@ टॉमी धन्यवाद, अधिक जानकारी जोड़ा गया। –
यदि आप अपनी एकमात्र समस्या है, तो आपको '==' का उपयोग करने के बजाय 'बराबर' का उपयोग करने में सक्षम होना चाहिए, लेकिन मुझे संदेह है कि कुछ अन्य समस्याएं भी होंगी जिन्हें आप अभी तक अपने प्रश्न में साझा नहीं कर रहे हैं: निकालने का कोई मानक तरीका नहीं है उदाहरण के लिए, एक इकाई की प्रमुख गुण। – hvd