2017-01-04 2 views
0

Gibt es in C# eine Möglichkeit, SqlDataRecord in einer Anweisung zu instanziieren und zu initialisieren?Können Sie einen SqlDataRecord in einer Anweisung instanziieren und initialisieren?

Statt dies in zwei Aussagen zu tun:

var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)); 
record.SetInt64(0, someLongVal); 

Ich mag es in einer Erklärung zu tun, statt zwei. Ist das möglich?

Edit: Ich möchte eine abgekürzte Art und Weise es zu tun B/C gerade jetzt dieses Stück Code ist in einer Schleife, die ich in eine Linq-Anweisung setzen möchte. Aber wenn ich es in Linq umwandele, mag ich nicht das Aussehen eines dreizeiligen Lambda, um zu instantiieren, Werte zu setzen und zurückzukehren. Ich suche also eine Alternative. Rein ästhetisch.

+0

Warum möchten Sie nicht zwei Anweisungen verwenden? – Servy

+1

Wenn Sie eine Anweisung erstellen, wird weniger lesbarer Code imo. – Amy

+0

Warum umhüllst du die beiden Anweisungen nicht in ihrer eigenen Routine, die 'someLongVal' akzeptiert und einen neuen SqlDataRecord ausspuckt? Nicht so cool wie eine Erweiterung, vielleicht, aber wenn alles, was Sie wollen, ist, diesen Anruf in eine Zeile für die Lesbarkeit zu reduzieren, könnte eine Routine funktionieren. – Carson

Antwort

4

Sie könnten Methodenverkettung mit einer Erweiterung verwenden !?

public static class DataRecordExtension 
{ 
    public static SqlDataRecord WithInt64(this SqlDataRecord record, int ordinal, long value) 
    { 
     record.SetInt64(ordinal, value); 
     return record; 
    } 
} 

... und es dann wie so verwenden:

var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)).WithInt64(0, someValue); 

Oder einen Helfer für Ihre Bedürfnisse bauen ....

public class DataRecordHelper 
{ 
    public static SqlDataRecord CreateDataRecordInt64(int ordinal, long value, params SqlMetaData[] metaData) 
    { 
     var record = new SqlDataRecord(metaData); 
     record.SetInt64(ordinal, value); 
     return record; 
    } 
} 
+0

lol, schlauer Workaround –

+0

Wenn Sie nur eine Methode erstellen wollen, warum nicht einfach etwas Sinnvoll gestaltet verwenden und eine Methode schreiben, die einen 'SqlDataRecord' erstellt und konfiguriert und damit fertig ist? – Servy

+0

@Steve Warum? Es erscheint vernünftig, den Autor der Antwort zu fragen, warum sie ein wirklich verwirrendes und irreführendes Design für eine Antwort verwenden würden, anstatt ein vernünftigeres, das auch die Anforderungen der Frage erfüllen würde. – Servy

3

Wenn Sie einen einzelnen Betrieb haben wollen Wenn Sie mehrere Vorgänge ausführen, erstellen Sie eine Methode, die diese mehreren Vorgänge ausführt. Wenn Sie also eine Operation erstellen möchten, die eine initialisierte SqlDataRecord erstellt, dann schreiben Sie eine Methode, die eine initialisierte SqlDataRecord erstellt.

public static SqlDataRecord CreateDataRecord(long value) 
{ 
    var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)); 
    record.SetInt64(0, value); 
    return record; 
} 
+0

Du warst zu schnell, redest meine Antwort :) –

Verwandte Themen