查询一组参数

时间:2014-05-20 22:17:03

标签: entity-framework linq-to-entities

我很难过这个。我已经尝试了所有我能想到的东西,并且每次都被挫败了。

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 server上。如何生成可与一组参数化数据对一起使用的Linq to Entities查询?

是否可以修改此查询以完全在sql server上执行?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

也许您可以预先组合字符串,然后投射字符串以便用于比较,如下所示:

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