2016-07-09 12 views
0

Ich versuche, eine separate Klasse mit einer LINQ-Abfrage für die Bindung an ein WPF-Formular verwenden. Ich habe den Code unten, den ich aus der Forschung auf dieser Seite und anderen zusammengestellt habe, bekomme aber einen Kompilierfehler.Make ObservableCollection-Klasse mit LINQ

kann nicht implizit Typ umwandeln 'System.Linq.IQueryable' zu system.Collections.ObjectModel.ObservableCollection‘. Eine explizite Konvertierung vorhanden ist (möglicherweise fehlt eine Guss?)

Staff_Time_TBL ist eine Klasse, die automatisch generiert wurde, als eine LINQ to SQL zu machen. Staff_Time_TBL ist der Name einer Table in SQL Server, was ich versuche, Daten von zu bekommen.

class ObservableData 
    { 
     public ObservableCollection<Staff_Time_TBL> InfoData { get; set; } 

     public ObservableData(DatabaseDataContext database, int staffNo, DateTime fromDate, DateTime toDate) 
     { 
      InfoData = new ObservableCollection<Staff_Time_TBL>(); 
      InfoData = database.Staff_Time_TBLs 
           .Where(staff => staff.Staff_No == staffNo && 
            staff.Date_Data == fromDate && 
            staff.Date_Data == toDate); 
     }    
    } 

Ich versuchte Tolist() zu verwenden, aber diese Kompilierung-Fehler zu erhalten,

kann nicht implizit Typ umwandeln 'System.Collections.Generic.List' zu 'System.Collections.ObjectModel.ObservableCollection'

Ich hoffe, ich habe klar, was ich versuche zu tun und jede Hilfe zu Was mache ich falsch?

Bearbeiten: Dies hat mehr mit der Implementierung der Sammlung zu tun.

+5

Diese Frage überhaupt nicht klar. Es unterscheidet sich kaum von Ihrem anderen [LINQ-Abfrage in ObservableCollection?] (Https://stackoverflow.com/questions/38277807/linq-query-into-observablecollection). Was meinst du mit "separate Klasse"? In welcher Weise ist 'ObservableCollection ' nicht das, was Sie wollen? In welcher Weise hat die Antwort in Ihrer anderen Frage, die den _Compiler_Fehler, über den Sie hier nachfragen, vollständig angesprochen, nicht erreicht, was Sie wollen. –

+0

Warum versuchen Sie weiterhin, Variablen, die nicht 'ObservableCollection ' sind, Dinge zuzuweisen, obwohl Sie bereits eine Antwort auf Ihre andere Frage haben, wie Sie ein ObservableCollection '-Objekt mit den Elementen aus Ihrem Frage drin? –

+0

@PeterDuniho, wenn ich wüsste, dass ich sicher bin, dass ich die Frage nicht gestellt hätte. Ich weiß es nicht anders zu sagen, ist es eine Methode innerhalb einer Klasse, was ich versuche zu tun? – KyloRen

Antwort

-1

Das ist für mich gearbeitet:

//Since i dont know what Staff_Time_TBL has or represents, i will use this as example 
public class SomeClass 
{ 
    public int number; 
    public string text; 
    public bool flag; 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     //Your observable collection 
     ObservableCollection<SomeClass> observableSomeClass = new ObservableCollection<SomeClass>(); 

     //I am assuming that in your LINQ query you are using a list or a structure, this is not important at all 
     List<SomeClass> listSomeClass = new List<SomeClass>(); 

     //Im just adding some data to my list to work with 
     listSomeClass.Add(new SomeClass 
     { 
      number = 1, 
      text = "ONE", 
      flag = true 
     }); 
     listSomeClass.Add(new SomeClass 
     { 
      number = 2, 
      text = "TWO", 
      flag = false 
     }); 
     listSomeClass.Add(new SomeClass 
     { 
      number = 3, 
      text = "THREE", 
      flag = true 
     }); 

     //This is a example LINQ query which is going to return me the ones that flag is equals to true (2) 
     var result = from node in listSomeClass 
        where node.flag == true 
        select new 
        { 
         node.number, 
         node.text, 
         node.flag 
        }; 

     //THIS IS THE TRICK: 
     //Instead of trying making a convertion or a toList(), try iterating your result from your linq query and adding it to your observable structure 
     foreach (var r in result) 
     { 
      observableSomeClass.Add(new SomeClass 
      { 
       number = r.number, 
       text = r.text, 
       flag = r.flag 
      } 
      ); 

     } 

     Console.ReadLine(); 
    } 

}

Ich hoffe, das Ihnen helfen kann.

+0

Vielen Dank, das macht vieles klar, mit dem ich Probleme hatte. Ich kann jetzt endlich sehen, warum meine andere Frage relevant ist. – KyloRen

2

Bitte versuchen Sie diesen Code:

InfoData = new ObservableCollection<Staff_Time_TBL> 
       (
        database.Staff_Time_TBLs 
        .Where(staff => staff.Staff_No == staffNo && 
          staff.Date_Data == fromDate && 
          staff.Date_Data == toDate).ToList() 
       ); 

Siehe this MSDN Link

+0

Danke, das hilft auch sehr, danke, dass du dir die Zeit genommen hast. Up für die Hilfe gewählt. – KyloRen