Pav*_*cka 12 .net c# linq dynamic
我有动态linq WHERE语句:
dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
Run Code Online (Sandbox Code Playgroud)
我想改变:
dataContext.Table.Where("id IN (0, 1, 2, ...)");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我怎样才能获得更好的性能呢?
Hug*_*une 10
//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);
Run Code Online (Sandbox Code Playgroud)
旁白:在动态linq表达式中使用占位符是一种好习惯.否则你可能会对linq注入攻击开放(通过动态LINQ可以注入吗?)
编辑:
实际上我觉得我搞砸了.不幸的是,我现在无法测试这一点.但我认为在这种情况下正确的语法应该是dataContext.Table.Where("@0.Contains(id)",ids);,而不是相反,并且该版本不能开箱即用.
请参阅此处了解将此功能添加到动态链接的方法.您需要为此修改库.
var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
Run Code Online (Sandbox Code Playgroud)