2016-06-07 3 views
0

IQueryable을 어떻게 인덱싱합니까?인덱싱 IQueryable <int>?

LINQ to sql 쿼리를 사용하여 특정 열의 값을 가져옵니다. 다음과 같이 쿼리

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

가 거기에서 나는 intitalQuery 변수를 할 수있는 색인하고 필요에 따라 값을 얻으려면입니다. 그 값은 다른 쿼리에서 사용됩니다. 내 첫 번째 시도는

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

가 그럼 난 행운과 here에서이 시도,이이었다. 그 방법은 바로 첫 번째 값을 얻을 수 있다는 것입니다 링크에서 내가 무엇을 할 수에서

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

, 나는 색인을 통해 모든 값을 얻을 수 있어야합니다. 어떻게 그것에 대해 가나?

+3

'.ToList()'? 그렇지 않으면 나는 당신이 "색인을 붙이는 것"에 의해 의미하는 것이 무엇인지, 그리고 그것이 왜 필요할지를 확실히 알지 못합니다. –

+0

@ JeroenMostert, 'for 루프'가 아니라 'foreach' 루프를 통해'intitalQuery '를 반복하십시오. – KyloRen

+0

@ JeroenMostert. 고마워, 그게 효과가있어. 답변을 게시하려면 해결 된 것으로 표시합니다. 감사합니다. – KyloRen

답변

2

IQueryable<T>IEnumerable에서 상속되며, 따라서 시퀀스에서 필요로하는 거의 모든 것을 수행하기위한 다양한 확장 메서드가 있습니다. 특히 .ToList()은 열거 형을 효율적인 인덱싱을 허용하는 List<T>으로 바꿉니다. 알 수없는 초기 길이의 순서로 작업 할 때 .ToArray() 정확히 맞는 크기의 배열을 끝내고 추가 사본을 필요로하기 때문에

.ToList()은 조금 더 효율적으로 더 분명 .ToArray()보다. (그러나 배열은 빠르게 루프를 통해, 그래서 그것은 모두 당신이 무슨 일을하는지에 따라 달라집니다.)

+0

추가 정보를 가져 주셔서 감사합니다. 대단히 감사합니다. – KyloRen

0

당신은이 작업을 수행 할 수 있습니다

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) 
});