2011-01-16 14 views
0

ich eine Linq-Abfrage wie folgt haben:Linq Casting Objekt

public static ViewUserDisplayPreferences GetUserDisplayPreferences(int TheUserID) 
{ 

    using (MyDataContext TheDC = new MyDataContext()) 
    { 

     var OutputUserDisplayPreferences = from user in TheDC.Users 
            where user.UserID == TheUserID 
            select new ViewUserDisplayPreferences 
            { 
             UserTimeFormat = user.UserTimeDisplay 
            }; 

     return (ViewUserDisplayPreferences)(OutputUserDisplayPreferences); 
    } 
} 

Für den Moment ist das Objekt ViewUserDisplayPreferences wie folgt definiert (weitere Variablen später hinzugefügt werden):

public class ViewUserDisplayPreferences 
{ 
public string UserTimeFormat { get; set; } 
}; 

On die Return-Anweisung zur Laufzeit, bekomme ich diesen Fehler:

Unable to cast object of type 'System.Data.Linq.DataQuery`1[ObjectsUsers.ViewUserDisplayPreferences]' to type 'ObjectsUsers.ViewUserDisplayPreferences'.]

Was ist los mit dem Code? Das Intellisense zeigt keinen Fehler in der Zeile?

Dank

Antwort

3

OutputUserDisplayPreferences ist ein IEnumerable<T>. Wenn Sie ein Objekt wollen, verwenden Sie entweder First (wenn es mehr als eins geben kann) oder Single (wenn Sie sicher sind, dass nur ein Objekt in der Sequenz sein wird) Methode für die Sequenz. Wenn es möglich ist, dass die Sequenz leer ist, verwenden Sie die entsprechende Methode *OrDefault.

3

Linq gibt eine Sammlung zurück. Fügen Sie am Ende einen .FirstOrDefault hinzu.

+0

Sie lesen es in Büchern, aber es ergibt später Sinn, wenn Sie stecken bleiben. Vielen Dank. – frenchie