我被这个问题难住了。我已经试过了我能想到的所有方法,但每次都被挫败了。
string[] s = {"a", "b", "c"};
string[] s2 = {"1", "2", "3"};
var s3 = s.Zip(s2, (first, second) => new string[] {first, second});
var ctx = db.Data.Where(x => x.SubList.All(y => s3
.Any(z => y.SubListProp.Name == z[0] && y.Value == z[1])));
假设如下:
代码优先、EF6、Data、SubList和SubListProp只包含您在本示例中看到的数据。
显然,这个例子不起作用,因为SQL表达式中不允许使用数组索引器。如果我将. asenumerable()添加到SubList中,查询将正常工作,但这会导致测试发生在客户端,而不是在sql服务器上。我如何生成一个将与一组参数化的数据对一起工作的实体查询?
是否可以修改此查询,使其完全在sql server上执行?如果有,是怎么做到的?
也许您可以预先组合字符串,然后投影字符串以便用于比较,如以下所示:
string[] s = {"a", "b", "c"};
string[] s2 = {"1", "2", "3"};
IEnumerable<string> s3 = s.Zip(s2, (first, second) => first+second);//a1,b2,c3
var ctx = db.Data.Where(x => x.SubList
.All(y => s3.Contains(y.SubListProp.Name + y.Value)));