2016-06-07 52 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>,允许有效的索引。

.ToList()具有未知初始长度的序列中工作时比更明显.ToArray()稍微更有效,因为.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) 
});