我有一個存儲庫模式,我用它來通過EF
訪問我的數據庫。這裏是我的功能之一:需要一個通用的存儲庫模式,需要兩個表引用和一個表達式
public IQueryable<T> Filter<T>(Expression<Func<T, bool>> predicate)
where T : class
{
return Context.Set<T>().Where<T>(predicate).AsQueryable<T>();
}
我想要做的是使用類似的東西來實現以下功能:
from c in Context.Customers
where !Context.Products.Any(p => p.ProductID == c.ProductID)
select c;
我需要這不只是工作的「客戶」和「產品「所以我需要一個通用的方法,如我的原始存儲庫功能所示。
---編輯---
我想這樣的事情後,我:
public IQueryable<T> Filter2<T, U>(Expression<Func<T,U, bool>> predicate)
where T : class
where U : class
{
return (Context.Set<T>().Where(
!Context.Set<U>().Any(predicate)));
}
我要尋找到這樣調用該函數:
var result = _repository.Filter2<Products, Customers>((p, c) => p.ProductID == c.ProductID);
- EDIT 2--
更多背景信息:
我需要檢查一個表中未在另一個表中引用的字段。我需要爲許多不同的表執行此操作,並且需要通過存儲庫服務訪問實體框架。我需要這樣做的通用函數,因爲我不想用表特定的函數填充存儲庫服務。我的要求是傳入一個表達式,該表達式定義檢查完成的方式以及引用表達式必須處理的兩個表的一些方法。
爲什麼你不使用相同的功能,但否定了謂詞? – quantka
我不確定你的意思。你可以把你需要的功能模型?它不需要使用正確的語法。 – tia
我很努力地在你的特定例子中看到這個用例 - 爲什麼你不只是'p.ProductID!= c.ProductID'? – James