LINQ to SQL中不能使用本地序列

Key*_*dly 4 c# linq-to-sql

除Contains运算符外,本地序列不能用于查询运算符的LINQ to SQL实现.

我从下面的linq查询中收到此错误:

List<Something> results = new List<Something>(items
.Where(w => selecteditems.Count == 0 || w.ops.Intersect(selecteditems).Count() > 0)
.ToList()
.OrderBy(a => a.FirstNumber)
.OrderBy(b => b.SecondNumber));
Run Code Online (Sandbox Code Playgroud)

交叉会抛出这个错误吗?

Ser*_*rvy 5

查询提供程序不知道如何转换w.ops.Intersect(selecteditems)为SQL查询.

如果selecteditems是来自同一查询提供程序的另一个查询,那么它可能能够翻译它们,或者如果整个操作是在Linq-to-Objects中完成的,而不是Linq-to-SQL,那么它就没问题了.

根据错误消息,它知道如何在这样的对象上执行的唯一操作是Contains.您可以重新处理查询以使用它:

.Where(w => selecteditems.Count == 0 || 
    w.ops.Any(op => selecteditems.Contains(op)))
Run Code Online (Sandbox Code Playgroud)

那[应该]有效.