我有几个表都具有相同的列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