SingleOrDefault的动态lambda表达式

时间:2015-05-04 11:39:27

标签: c# linq lambda linq-expressions

我有一个包含一组表的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();

有什么想法吗?

1 个答案:

答案 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可以缓存,所以我们不需要每次都构建它,但它应该工作相同