查询一组参数



我被这个问题难住了。我已经试过了我能想到的所有方法,但每次都被挫败了。

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)));

最新更新