我有一個多租戶應用程序,並且所有數據都在同一個數據庫中。我們通過objectToTenant表分割每個租戶的數據。插入Func <T, int>值到linq-2-sql查詢
在一般存儲庫類我想要實現其過濾的對象的方法只是通過指定該對象的屬性是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的[]) - 了Methode gibt ES keineunterstützteÜbersetzung在SQL。
這是由Func<T, int>
方法引起的,不能被轉換成sql。
我該如何更改Func<T, int>
以便它可以被翻譯或做別人的解決方案?
而不是在'IQueryable'中傳遞'Func'傳入所有可能的項目並使用它們加入。 –
Steven
2012-02-13 11:08:39
對於Entity Framework能夠翻譯它,你必須傳遞一個'Expression>'。 –
2012-02-13 11:12:31