在Linq存储过程中的Nullable字段问题+ VS2008上的水晶报告

时间:2011-08-31 01:51:10

标签: sql-server linq stored-procedures crystal-reports

我在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 的结构。

2 个答案:

答案 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中

http://msdn.microsoft.com/en-us/library/ms190349.aspx

答案 1 :(得分:0)

您可以手动将linq中的映射更改为sql文件,使其不为null。无论如何,SP永远不会返回null。该文件是dbml对吗?

我甚至不知道那是否可能。我知道如果它是实体的linq。