我正在尝试编写此方法:
public IQueryable<String> FilterIp(Boolean filter)
{
return filter ? ((IEnumerable<String>)_filterIp).Select(x => x).AsQueryable() : ((IEnumerable<String>)new String[0]).Select(x => x).AsQueryable();
}
String[] _filterIp = new[] { "191.16.95.133", "::1", "127.0.0.1" };
然后想像这样使用它:
.Where(ip => !FilterIp(filtered).Contains(ip)).ToList()
问题是我收到错误:
其他信息:LINQ to Entities无法识别该方法 'System.Linq.IQueryable`1 [System.String] FilterIp(Boolean)'方法, 并且此方法无法转换为商店表达式
答案 0 :(得分:0)
为什么需要使用IQueryable?只需使用数组本身:
.Where(ip => !_filterIp.Contains(ip)).ToList();
您可能希望查看类似的stockoverflow问题: Pass int array in where clause of LINQ Query
答案 1 :(得分:0)
从技术上讲,这就足够了
var filterIp = filter
? new[] { "191.16.95.133", "::1", "127.0.0.1" }
: new string[0];
var query = <body>.Where(ip => !filterIp.Contains(ip));
但我不知道FilterIp()
是否在其他组件中。如果是这样,它就足以包含上面的第一行代码。
如果filter
的值已知为“接近”查询,您也可以
IQueryable<YourClass> query = <body>;
if (filter)
query = query.Where(ip => !filterIp.Contains(ip));
其中filterIp
只是IP地址数组。