我有幾個表都具有相同的列domainID
,它們基本上只是控制哪些數據顯示在哪個網站上,因爲它們共享數據庫。傳遞lambda表達式作爲參數
所以當我去控制一個表的數據綁定時,我需要創建一個大的開關來處理不同的LINQ查詢。我想創建一個實用方法,它將表類型作爲參數,然後根據傳入的表中的列返回where子句。
public static IEnumerable<T> ExecuteInContext<T>(
IQueryable<T> src)
{
int domain = 1;//hard coded for example
return src.Where(x => x.DomainID == domain);//Won't work, has to be a way to do this.
}
我被卡在返回碼上。你不能簡單地構造一個像我一樣的where子句,因爲它不知道我在說什麼表。
我試圖調用第一種方法是這樣的:
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var q = Utility.ExecuteInContext(db.GetTable<item>());
Repeater1.DataSource = q;
Repeater1.DataBind();
}
我希望這說明了什麼,我試圖做的。
編輯: BrokenGlass的答案解決了我的問題。我想補充一點,你需要打開你的.dbml.cs文件,並用你的界面擴展表/類。我還想指出,如果我的專欄可以爲空,那麼該項目不會生成,它說它與我的界面不同。
當我嘗試調用此方法並將參數設置爲我的'item'表時,它表示沒有從'item'到'utility.IFoo'的顯式引用轉換。 – 2011-04-08 19:51:00
您的item表類實現了'IFoo'嗎?這對於此工作是必需的。你可能需要在分類中添加它,我使用Linq到實體 - 希望Linq到SQL也是一樣,如果不是,那麼忽略這個答案 – BrokenGlass 2011-04-08 19:56:06
我不知道該怎麼做。我現在擁有的是我的問題中的第二個代碼塊。 – 2011-04-08 19:58:21