2010-12-30 4 views
2
public long GetNewCRN() 
{ 
    return ((from c in DataContext.GetTable<Cust_Master>() 
      select c.CUSTSERH_CRN).Max() + 1); 
} 

Wird diese Abfrage Linq to Sql zuerst alle Datensätze aus der Tabelle abrufen und dann das Maximum der Spalte auswählen?Wird diese LINQ-TO-SQL-Abfrage alle Datensätze aus der Tabelle abrufen?

Wenn ja, dann ist es nicht eine schlechte Idee mit linq to sql anstelle von normalen SqlCommand?

Oder gibt es einen anderen Weg, es in linq to sql zu tun?

Wenn ich Console.Out anschließe, sehe ich nichts (die Eingabeaufforderung öffnet sich nicht einmal).

Aber als ich zählen folgende: -

context.Log = new System.IO.StreamWriter("d:\\abcd.txt");

ich eine Fehlermeldung erhalten, dass „der Prozess nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird“, und dieser Prozess ist „w3wp. exe ".

Wie kann ich dann die SQL-Befehle sehen, die von DataContext ausgeführt werden?

+1

Haben Sie haben versucht, es zu testen und es zu profilieren? – Phill

+0

Eine neue "CRN" wie diese zu erhalten, ist eine schlechte Idee zu beginnen ... es ist ** nie ** sicher, wenn mehrere Benutzer diese Datenbank benutzen! Wenn Sie eine automatisch inkrementierende Zahl haben möchten (was ich denke, dass Sie das hier tun), verwenden Sie eine 'INT IDENTITY' in Ihrer Tabelle - das ist der einfachste Weg, um einzigartige und ständig wachsende Nummern zuzuweisen. –

+0

Datenbank ist bereits entworfen und ich muss es verwenden, es ist nicht in meinen Händen. – teenup

Antwort

2

Nein, dies sollte nicht alle Zeilen abrufen. Sie fordern nur den maximalen Wert an. Dies sollte zu einer SQL-Abfrage wie folgt umgewandelt werden:

SELECT MAX(CUSTSERH_CRN) FROM Cust_Master 

Sie können überprüfen, ob dies der Fall ist durch einen Logger an dem Datacontext-Befestigung, bevor Sie den Befehl ausführen, zum Beispiel:

DataContext.Log = Console.Out; 
+0

Wenn ich Console.Out anschließe, sehe ich nichts (die Eingabeaufforderung öffnet sich nicht einmal). Bitte sehen Sie meine nächste Antwort. – teenup

+0

@Puneet Dudeja: Sie können auch einen StringWriter verwenden und dessen Inhalt im Debugger anzeigen. –

Verwandte Themen