我有一个非常简单的Linq查询,显示运行时错误
查询是
// string[] Blocks = _TableView.permission.BlockList.Split(',');
// string[] Permissions = _TableView.permission.PermissionsList.Split(',');
string[] Blocks = ... some string array ...;
string[] Permissions = ... some string array ... ;
var test = await (from t in _context.DocumentIn
where
Permissions.Contains(t.Imp_Exp.ToString()) &&
Permissions.Contains(t.confLevel.ToString()) &&
Blocks.Contains(t.BlockName)
select t).ToListAsync();
错误是
could not be translated. Either rewrite the query in a form that can be translated,
or switch to client evaluation explicitly by inserting a call to either AsEnumerable(),
AsAsyncEnumerable(), ToList(), or ToListAsync().
跟踪时的一些注意事项发现块和权限充满了值。
当我从查询中删除权限的两个条件时,它的工作原理如下
var test = await (from t in _context.DocumentIn
where
/*Permissions.Contains(t.Imp_Exp.ToString()) &&
Permissions.Contains(t.confLevel.ToString()) &&*/
Blocks.Contains(t.BlockName)
select t).ToListAsync();
如果Permissions
是基于整数的字符串数组,一个简单的解决方案是将该数组转换为int
:
int[] Permissions = _TableView.permission
.PermissionsList
.Split(',')
.Select(s => int.Parse(s)).ToArray();
并删除ToString
引起异常的呼叫:
var test = await (from t in _context.DocumentIn
where Permissions.Contains(t.Imp_Exp) &&
Permissions.Contains(t.confLevel) &&
Blocks.Contains(t.BlockName)
select t).ToListAsync();
但是主要的想法是ToString
,无论您遇到什么情况,删除呼叫均应尝试将其从查询中删除
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句