Frage

Mit dem Methodenparameter

Int16? id

Und die LINQ to SQL-WHERE-Klausel

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

Der resultierende Befehlstext für den Zustand im Datenkontext ist

Von der Visualizer:

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

Meine abgebildet Klasse hat die Id als Int16 und die Datenbank selbst den Spaltentyp als Smallint hat, also warum nicht die hinter den Kulissen sql denkt, der Parameter ist eine ganze Zahl (Int32) und kein smallint (Int16)


Spaltenzuordnung:

    [Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
    public Int16 Id { get; set; }
War es hilfreich?

Lösung

Die Änderung where-Klausel lesen

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

Es ist etwas über die Nullable-kurz, dass es weg wirft. Ich bin mir nicht sicher, warum, aber ich lief dies in vor und fand das Hinzufügen .Value funktionieren wird.

Andere Tipps

Hmmm ... Ich merke, dass Sie gar keine Darstellung des! Id.HasValue in der SQL bekommen. Vielleicht ist dies eine Art von Betrug zu, dass im Zusammenhang eingewickelt zu werden? Scheint mir unecht, aber das einzige, was ich mir vorstellen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top