Итак, идею нашел. Создайте обернутый объект с необходимыми свойствами и приведите его к типу сущности после выполнения запроса.
internal EntityWrapper<T>
{
public T Model { get; set; }
public bool Hidden { get; set; }
}
public IQueryable<T> All(bool loadHidden = false)
where T : class, IEntity, IHiddenEntity
{
string tableName = "<T> name";
var query = from x in Context.Set<T>()
join h in Context.Set<Hidden>().Where(record => record.TableName == tableName) on x.Id equals h.RecordId into hr
from h_r in hr.DefaultIfEmpty()
select new EntityWrapper<T>(){ Model = x, Hidden = h_r != null};
if(!loadHidden)
query = query.Where(x => !x.Hidden);
}
И приведите после сборки sql запроса и результатов с обернутым объектом.
Expression<System.Func<EntityWrapper<T>,T> castFunc = x => x.Select(wr => {wr.Model.Hidden = wr.Hidden; return wr.Model;});
Используйте только объект IEnumerable<EntityWrapper<T>>
.
var result = castFunc(<query>.ToList());