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)
+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 ... –
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
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