私はいくつかのコードを読みやすくしようとしていますが、拡張メソッドやその式をどのように構造化するかについては十分に理解していません。現在、私はできるよここでの目標は.ActiveRecords()
LINQ to Entitiesは(関連エンティティの)メソッドを認識しません
のような拡張メソッドで.Where(RecordStatusTypeId != (int)RecordStatusTypes.Deleted)
のような文を置き換えることです(IRecordStatus
のインターフェイスから実装されている)それらのRecordStatusTypeId
public interface IRecordStatus
{
int RecordStatusTypeId { get; set; }
RecordStatusType RecordStatusType { get; set; }
}
を持っている多くの企業を持っています私はDbSet<T>
、IQueryable<T>
、は、この拡張メソッドを持っている*
public static IQueryable<T> ActiveRecords<T>(this DbSet<T> entitySet)
where T : class, IRecordStatus
{
return entitySet.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted);
}
次の拡張メソッドでこれを達成するために、およびIEnumerable<T>
私のようなもの置き換えるしようとすると、これはMyDbContext.Entities.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted)
ようなステートメントのための素晴らしい作品が、私はエラー「エンティティへのLINQのメソッドを認識しません」を取得:私は「何で
MyDbContext.Entities.Where(e => e.RelatedEntity.Where(re => re.RecordStatusTypeId != (int)RecordStatusTypes.Deleted));
をやりたいdは:私は、LINQの句内DbSet
上だけでなく、関連するエンティティ上でアクティブなレコードをフィルタリングすることができるように
MyDbContext.Entities.Where(e => e.RelatedEntity.ActiveRecords().Any());
は、どのように私は私の拡張メソッドを変更(または式を追加する)ことができますか?
エンティティフレームワークプラスはこれを行うことができます: https://github.com/zzzprojects/EntityFramework-Plus –
@CyrilIselin、ありがとう、私はそれをチェックアウトします。 –
メソッドをT-SQLに変換できませんでした。エンティティがそれを認識できませんでした。あなたの 'Entities'に' AsEnumerable'を追加して、もう一度やり直してください: 'MyDbContext.Entities.AsEnumerable()。Where ...'。 –