У меня мультитенантное приложение, и все данные находятся в одной базе данных. Мы разделяем данные для каждого арендатора по таблице objectToTenant.
В общем классе репозитория я хочу реализовать метод, который фильтрует объекты, просто указывая, какое свойство объекта является tenantToObjectRelationId и какой тип является объектом (необходимо, поскольку в таблице отношений хранятся различные типы)
Звонок, который я хочу сделать, должен выглядеть следующим образом:
// Specialized Repository class
var allItemsForTenant =
this.AllForTenant(item => item.RelationId, 123);
и поэтому я реализовал этот метод:
// Generic Repository class
public virtual IQueryable<T> AllForTenant(
Func<T, int> getObjectToTenantRelationId, string objectType)
{
var result =
from item in this.context.GetTable<T>( )
join tenantObject in (
from tenantRelationRecord in objectTenantRelationRepo.All( )
where tenantRelationRecord.TenantId == Global.TenantId
where tenantRelationRecord.ObjectTypeId == type.TypeId
select tenantObjectRecord)
on getObjectToTenantRelationId( item ) equals tenantObject.ObjectId
select item;
return result;
}
но в данный момент я получаю NotSupportedException
Описание System.Object DynamicInvoke (System.Object []) - методические указания
keine unterstützte Übersetzung в SQL.
, вызванный методом Func<T, int>
, который не может быть переведен в sql.
Как мне нужно изменить Func<T, int>
, чтобы его можно было перевести, или у кого-то есть другое решение?