2009-04-13 6 views
2

Ich weiß, Linq-to-SQL ist tot, aber trotzdem, ich denke, das ist wirklich einfach, ich bin nur verwirrt darüber, was Magie Linq-to-SQL tut und nicht in Bezug auf die SQL es generiert.In expliziter LINQ-to-SQL (C#) Bestellung ist wichtig?

Wenn ich einen Ausdruck Baum als „myPredicate“ aufgebaut, und haben so etwas wie dieses:

(from request in DataContext.RequestsTable 
select request).Where(myPredicate) 
       .OrderByDescending(item => item.changeDate) 
       .Take(10) 

ist es wie die folgende SQL zur Arbeit zu gehen:

SELECT TOP 10 * FROM RequestsTable 
WHERE (<<myPredicate equivalent>>) 
ORDER BY ChangeDate DESC 

Es scheint nur Seltsam für mich, weil das ".Where()" hinter dem "select" in meinem Beispielcode steht. Hat die relative Positionierung von "select" und "where()" und "orderby()" einen Einfluss auf die Dinge?

Alternativ könnte ich alles in sql-esque Syntax tun? Gibt es zum Beispiel eine Möglichkeit, mein WHERE-Prädikat in der alternativen Syntax zu verwenden, etwa so?

(from request in DataContext.RequestsTable 
where [somehow inject myPredicate] 
order by changeDate descending 
select request).Take(10) 

Antwort

7

Sie haben dort die gleiche Abfrage bekommen, LINQ to SQL wird den T-SQL nicht auswerten und erzeugt erst, nachdem Sie etwas getan haben die Abfrage (wie ein .ToList() zum Beispiel auszuführen . die Reihenfolge spielt keine Rolle

In der Tat können Sie sogar SortiertNach hinzufügen und wo Klauseln nach der Zuordnung der ersten Abfrage

zB

var query = (from x in context.RequestsTable 
      select x); 

query = query.AsQueryable().Where(<>); 

return query.ToList(); //executes 

das gleiche wie:..

return (from x in context.RequestsTable 
      where <> 
      select x).ToList(); //executes 

ist die gleiche wie:

return (from x in context.RequestsTable 
     selext x).Where(<>).ToList(); 

ich nicht sicher, LINQ to SQL bin ist „tot“ aber ich habe gehört, dass es vielleicht das ADO Entity Framework gerollt werden wird. LINQ to SQL generiertes T-SQL ist dem Entity Framework weit überlegen!

+0

+1 für das T-SQL generiert von linq2sql ist besser als EFs T-SQL :) (nicht genug Leute sagen das laut), l2s wird nicht so lange sterben, wie wir (die Entwickler) es halten wollen lebendig ... –

+0

Die EF T-SQL ist so schlecht - ich habe am Wochenende ein Beispiel gebloggt: http://internationalized.spaces.live.com/blog/cns!43F3A7682D1564E4!1458.entry – RobS

+0

Nur ein FYI - es gibt einige Fälle, in denen die Reihenfolge zählt. Wenn Sie zum Beispiel .OrderBy ... vor. Wo auf einem IQueryable dann können Sie mit SQL-Abfragen, die entweder ineffizient sind oder nicht tun, was Sie erwarten, enden. Aber anders als das ist es sicher, um IQueryables zu jonglieren ... – KristoferA