2016-06-07 8 views
0

Wie indexieren Sie ein IQueryable?Indizierung IQueryable <int>?

Ich verwende eine LINQ zu SQL-Abfrage, um Werte aus einer bestimmten Spalte zu erhalten. Die Abfrage ist wie folgt,

var intitalQuery = (from a in sql.GetTable<Staff_Time_TBL>() 
           where a.Info_Data == SelectedOption 
           select a.Staff_No).Distinct(); 

Von dort Ich möchte in der Lage sein, den Index zu intitalQuery Variable und Werte erhalten je nach Bedarf. Dieser Wert wird dann in einer anderen Abfrage verwendet. Mein erster Versuch war,

Column1.DataContext = sql.Staff_Time_TBLs.Where(item =>      
        item.Section_Data == SelectedOption && 
        item.Staff_No == intitalQuery[0]; 

Dann habe ich versucht, diese von here ohne Glück.

Column1.DataContext = sql.Staff_Time_TBLs.Where(item => 
        item.Section_Data == SelectedOption && 
        item.Staff_No == intitalQuery.First()); 

Von dem, was ich von der Verbindung kann, ist, dass auf diese Weise nur den ersten Wert bekommt, möchte ich alle Werte über die Indizierung in der Lage sein zu bekommen. Wie gehst du da vor?

+3

'.ToList()'? Ansonsten bin ich nicht ganz sicher, was Sie mit "Indexierung" meinen und warum Sie es überhaupt brauchen würden. –

+0

@ JeroenMostert, Loop durch die 'intitalQuery' über eine' for-Schleife', nicht 'foreach'-Schleife. – KyloRen

+0

@ JeroenMostert. Danke, das hat funktioniert. Wenn Sie die Antwort posten wollen, werde ich sie als gelöst markieren. Danke – KyloRen

Antwort

2

IQueryable<T> erbt von IEnumerable und als solche hat eine Fülle von Erweiterungsmethoden, um fast alles, was Sie von einer Sequenz benötigen, zu erreichen. Insbesondere wandelt .ToList() eine aufzählbare Zahl in eine List<T> um, die eine effiziente Indizierung ermöglicht.

.ToList() ist etwas effizienter als die offensichtlicheren .ToArray(), wenn sie mit Sequenzen unbekannter Anfangslänge arbeiten, weil .ToArray() eine zusätzliche Kopie erfordert mit einer Reihe von genau die richtige Größe, um am Ende. (Aber Arrays sind in einer Schleife schneller über, so dass es hängt alles davon ab, was du tust.)

+0

Danke für die zusätzlichen Informationen. Sehr geschätzt. – KyloRen

0

Sie können dies tun:

public static List<Staff_Time_TBLs> GetIndexed(string staffNo){ 
    var stuff = sql.Staff_Time_TBLs.Where(item =>      
       item.Section_Data == SelectedOption && 
       item.Staff_No == staffNo; 
    return stuff.ToList(); 
} 

//to use it... 
initialQuery.ForEach(p=>{ 
    var indexvalue = GetIndexed(p) 
}); 
Verwandte Themen