我有一个包含一组表的DataClassesDataContext
,我正在尝试仅使用表名和字段名来动态过滤lambda expression
。基本上我想为每个表找到一个具有特定ID的行。
如果我提前知道这张桌子,我会用:
if (dataClassesDataContext.MYTABLEXs.SingleOrDefault(m => m.MYTABLEX_ID == MyId))
DoExists();
但是当我将表名为MYTABLEX和MYTABLEY(以及字段名称为MYTABLEX_ID和MYTABLEY_ID)作为字符串时,我正在尝试在运行时构建上述过滤器。
我可以使用以下方式动态访问该表:
Type tableType = Type.GetType(incommingtableName); // incommingtableName being looped over MYTABLEX, MYTABLEY , ...
var dbTable = dataClassesDataContext.GetTable(tableType);
然后我被困住了。我如何构建一个行为类似于:
的lambda表达式if (dbTable.SingleOrDefault(m => m.incommingtableName_id == MyId))
DoExists();
有什么想法吗?
答案 0 :(得分:2)
您可以在运行时构建表达式。此外,您还需要具有int min_steps(int N){
if(N==1) return 0;
else{
if(N%3==0){
return(1+min(min_steps(N/3),min_steps(N-1)));
}
else if(N%2==0){
return(1+min(min_steps(N/2),min_steps(N-1)));
}
else
return(1+min_steps(N-1));
}
}
方法的通用版本。这是一个例子:
SingleOrDefault
尽可能优化构造的lambda可以缓存,所以我们不需要每次都构建它,但它应该工作相同