Bazı kodları daha okunabilir hale getirmeye çalışıyorum ve uzantı yöntemini ve/veya ifadesini nasıl yapılandıracağımı tam olarak anlamadım. Şu anda üzerlerinde RecordStatusTypeId
burada amacım açabiliyorum .ActiveRecords()
LINQ - Varlıklar yöntemi (ilgili bir varlıkta) tanımayan
gibi bir uzantı yöntemi ile .Where(RecordStatusTypeId != (int)RecordStatusTypes.Deleted)
gibi bir ifade değiştirmektir
public interface IRecordStatus
{
int RecordStatusTypeId { get; set; }
RecordStatusType RecordStatusType { get; set; }
}
(IRecordStatus
bir arayüzden uygulanan) olan birçok varlıklara sahip aşağıdaki uzatma yöntemi ile Bunu gerçekleştirmek için:
public static IQueryable<T> ActiveRecords<T>(this DbSet<T> entitySet)
where T : class, IRecordStatus
{
return entitySet.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted);
}
Ben
DbSet<T>
için bu uzantı yöntemine sahip *
, IQueryable<T>
, ICollection<T>
ve IEnumerable<T>
Bu MyDbContext.Entities.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted)
gibi ifadeleri için çok çalışır, ama ben hatayı ben gibi bir şey değiştirmeye çalışırsanız "varlıkları için LINQ yöntemini tanımıyor" olsun: Ben ne
MyDbContext.Entities.Where(e => e.RelatedEntity.Where(re => re.RecordStatusTypeId != (int)RecordStatusTypes.Deleted));
yapmak istiyorum: Ben DbSet
yanı sıra bir linq maddesi içinde ilgili varlık üzerinde aktif kayıtları için filtre böylece
MyDbContext.Entities.Where(e => e.RelatedEntity.ActiveRecords().Any());
nasıl Uzatma Yöntemleri değiştirmek (veya bir İfade ekleyin) olabilir?
Entity Framework Plus bunu yapabilir: https://github.com/zzzprojects/EntityFramework-Plus –
@CyrilIselin, Teşekkürler, ben kontrol edeceğim. –
Yönteminiz T-SQL'e çevrilemiyor, Varlıkların Linq tarafından tanınması mümkün değil. 'AsEnumerable' öğesini' Entities''e ekleyin ve tekrar deneyin: 'MyDbContext.Entities.AsEnumerable(). Where ...'. –