使用方法参数

Int16? id

Linq to SQL where子句

where !id.HasValue || m.Id == id

数据上下文中条件的结果命令文本是

来自可视化工具:

SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5

我的映射类将Id作为Int16,数据库本身的列类型为smallint,那么为什么幕后的sql认为参数是整数(Int32)而不是smallint(Int16)?


列映射:

    [Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
    public Int16 Id { get; set; }
有帮助吗?

解决方案

将where子句更改为

where !id.HasValue || m.Id == id.Value

有一些关于可空的短片正在抛弃它。我不知道为什么,但我之前遇到过这个问题,发现添加 .Value 会有效。

其他提示

嗯......我注意到你没有在sql中获得任何!id.HasValue的表示。也许这是与被包裹相关的某种诡计?对我来说似乎是假的,但我能想到的唯一的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top