我想在我的整数上使用OR运算符。我可以使用这样的东西。LINQ自定义OR运算符在SQL服务器上聚合
new int[] { 1, 1, 2, 2, 4, 8, 24, 32, 56 }.Aggregate((a,b) => a | b)
,等于63.不过,我不能这样做
db.numbers.Select(a => a.number).Aggregate((a,b) => a | b)
它抛出该异常:
NotSupportedException异常:LINQ到实体无法识别方法“ Int32 Aggregate [Int32](System.Collections.Generic.IEnumerable
1[System.Int32], System.Func
3 [System.Int32,System.Int32,System.Int32])'方法,并且此方法不能转换为存储表达式。'```
我认为是因为它不知道sql server中的什么函数实现了a | b
。我也不知道。
有没有什么办法可以在没有本地聚合的情况下实现呢?
它不是'|',它是不支持的'Aggregate'。您可以在这里看到LINQ to Entites中受支持和不受支持的LINQ方法的列表:https://msdn.microsoft.com/en-us/library/vstudio/bb738550(v=vs.100).aspx – MarcinJuraszek
另一个考虑的选择是编写一个自定义的.Net聚合函数并将该DLL导入到SQL Server本身。我做了很多这些,他们工作得很好。虽然我不确定如何从LINQ调用它,但如果目标是在SQL方面进行繁重的工作,那么值得探讨。 –
@JosephGagliardo我在挖掘mysql时做了类似的事情,它只是一个用C++编写的sql函数。但在这种情况下,我必须告诉Linq有一个名为“mycustomor”的函数,并且最难告诉它是一个聚合函数。但这是一个很好的提及,当事情变得复杂时,我会试验它。谢谢! –