我在将 c# 函数与 Linq-To-SQL 中的条件混合时遇到问题
假设我有一个数据库表“事物”和一个本地 c# 函数:bool isGood(thing, params)
我想使用该函数从表中选择行。
var bad = dataContext.Things.Where(t=>t.type=mytype && !isGood(t,myparams))
dataContect.Things.deleteAllOnSubmit(bad);
或者
if (dataContext.Things.Any(t=>t.type=mytype && isGood(t,myparams)))
{
return false;
}
当然这不起作用,Linq 无法将我的函数翻译成 SQL 语句。所以这将产生:
NotSupportedException:方法 'Boolean isGood(thing,params)' 不支持对 SQL 的转换。
重新设计它以使其正常工作的最佳方法是什么?
我可以拆分语句并转换为这样的列表:
List<Things> mythings dataContext.Things.Where(t=>t.type=mytype).toList()
if (mythings.Any(t=>isGood(t,myparams)))
{
return false;
}
这可行,但似乎效率低下,因为必须在每种情况下生成整个列表。而且我认为我不能对结果执行 deleteAllOnSubmit
我可以对神话做一个 foreach 而不是调用 toList(),这也有效。虽然看起来不优雅。
我还有什么其他选择,这里推荐的方法是什么?
编辑:
调用 asEnumerable() 似乎是另一种选择,并且至少比 toList() 更好。IE
dataContext.Things.Where(t=>t.type=mytype).asEnumerable().Any(t=>isGood(t,myparams))