2010-05-30 18 views
7

ich die Ergebnisse einer Abfrage nehmen müssen:Umwandlung Linq-Abfrage iCollection

var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m; 

und bereiten als ICollection so, dass ich so etwas wie

ICollection<SoilSamplingSubJob> subjobs 

im Moment ein schaffe ich haben kann Liste, die auf meine Bedürfnisse angemessen ist nicht:

query.ToList(); 

, was soll ich tun - ist es query.ToIcollection()?

+1

ein besonderer Grund für Tagging diese Frage mit 'asp.net-mvc'? –

Antwort

14

Liste ist eine ICollection. Sie können Ihren query.ToList() - Code wie folgt ändern.

Sie fragen Sounds wie diese Abfrage als Funktionsergebnis zurückgegeben wird. Beachten Sie in diesem Fall, dass die Linq to SQL-Objekte standardmäßig verbunden sind. Daher müssen Sie verwalten, wo der Datenbankkontext geöffnet und geschlossen wird. Alternativ können Sie DTOs (Data Transfer Objects) erstellen, die die Daten enthalten, die Sie für den Rest Ihres Programms verwenden möchten. Diese Objekte können beliebig in Ihre Objekthierarchie passen.

Sie können diese DTOs auch als Teil der Abfrage erstellen.

+0

danke Jason! Herzlichen Dank – bergin

0

Da die Abfrage IEnumerable implementiert, können Sie sie an den Konstruktor der Sammlung Ihrer Wahl übergeben. ICollection ist eine Schnittstelle, die von mehreren Klassen implementiert wird (einschließlich List<T>, die ToList zurückgibt) mit unterschiedlichen Leistungsmerkmalen.

0

Mit etwas anderer Syntax können Sie auch so etwas tun, das in der ICollection reduziert werden kann. Dieser Ansatz ist für Winkel- und MVC, wenn Sie einen großen Tisch haben wollen aber nur ein paar Requisiten in die cshtml Seite laden:

ICollection<SoilSamplingSubJob> samples = dbContext.GetQuery().Where(m => m.order_id == id) 
.AsEnumerable().Select(s => new 
      { 
       Id = s.order_id, 
       CustomProperty = s.some_thing 
      }).ToList() as ICollection<SoilSamplingSubJob> 
Verwandte Themen