die Natur der SELECT-Abfrage in MVC und LINQ TO SQL
ich bin etwas verwirrt durch die Natur und die Arbeit der Abfrage habe ich versucht, access-Datenbank, die enthält die einzelnen Namen mehr als einmal mit demselben EMPid, wenn ich also zugegriffen es in meinem DROP-DOWN-LISTE, dann gleiche Wiederholung war auch drin also habe ich versucht zu entfernen, die Wiederholung, indem Sie DISTINCT in der Abfrage aber das hat nicht funktioniert, aber später habe ich es geändert einen anderen Weg und arbeitete, aber WARUM DAS funktioniert VERSTEHE ich NICHT ?
ABFRAGE, DIE NICHT FUNKTIONIERT HAT
var names = (from n in DataContext.EmployeeAtds select n).Distinct();
ABFRAGE, die GEARBEITET, von denen ich nicht weiß, wie ?
var names = (from n in DataContext.EmployeeAtds select new {n.EmplID, n.EmplName}).Distinct();
warum der 2. so funktioniert, wie ich wollte (Kommissionierung jedes name 1 Zeit)
ich bin mit mvc 3 und linq zu sql, und ich bin Neuling.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide Abfragen sind unterschiedlich. Ich bin zu erklären, dass Sie die Abfrage in SQL, die Ihnen helfen, zu verstehen sowohl Anfragen.
Ihre erste Abfrage ist:
SQL:-
Ihre zweite Abfrage ist:
SQL:-
Jetzt können Sie sehen SQL-Abfrage für beide Anfragen. Erste Abfrage ist zu zeigen, dass Sie die Distinct auf alle Spalten der Tabelle, aber in der zweiten Abfrage, die Sie implementieren distinct nur auf die gewünschten Spalten, so gibt Sie Ihnen das gewünschte Ergebnis.
Als pro Scott Allen ist die Erklärung
Die docs für Verschiedene klar – die Methode verwendet die Standard-Gleichheit comparer, um test für die Gleichheit, und die Standard-comparer sieht 4 verschiedene Objekt-Referenzen. Eine Möglichkeit, dies zu umgehen, wäre die Verwendung der überladenen version von unterschiedlichen akzeptiert eine benutzerdefinierte IEqualityComparer.
Herausstellt, dass der C# - compiler überschreibt Equals und GetHashCode für anonyme Typen. Die Umsetzung der beiden überschriebenen Methoden verwendet, die alle öffentlichen Eigenschaften, auf die Art zum berechnen eines Objekts hash-code und test für die Gleichheit. Wenn zwei Objekte der gleichen anonymen Typs haben alle die gleichen Werte für Ihre Eigenschaften – die Objekte gleich sind. Dies ist eine sichere Strategie, da anonym typisierte Objekte werden im wesentlichen unveränderlich (alle Eigenschaften sind read-only).
Versuchen Sie dies:
Update: