我在Sql Server中有一个表,其中包含允许空值的int字段价格。 我创建了以下存储过程:
CREATE PROCEDURE [dbo].[proc_test]
AS
select a.id, a.product, case when a.price is null then 0 else a.price end
from tblOne a
...
我还创建了一个使用 proc_test 的 linq to sql 文件。
问题是自动生成linq to sql代码: designer.cs 有一个可以为空的价格变量而 Crystal Reports 不是允许可以为空的变量。
PS:我不允许更改 tblOne 的结构。
答案 0 :(得分:1)
使用IsNull()函数代替case表达式。因此,将存储过程更改为:
CREATE PROCEDURE [dbo].[proc_test]
AS
select a.id, a.product, isnull(a.price, 0)
from tblOne a
...
注意:
Coalesce不适合这种情况:
考虑涉及具有非空参数的ISNULL的表达式 为非NOT,而涉及COALESCE的表达式为非null 参数被认为是NULL。在SQL Server中
答案 1 :(得分:0)
您可以手动将linq中的映射更改为sql文件,使其不为null。无论如何,SP永远不会返回null。该文件是dbml对吗?
我甚至不知道那是否可能。我知道如果它是实体的linq。