索引IQueryable <int>?

时间:2016-06-07 11:15:48

标签: c# linq

如何索引IQueryable?

我正在使用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());

从链接中我可以得到的只是第一个值,我希望能够通过索引获取所有值。你是怎么做到的?

2 个答案:

答案 0 :(得分:2)

IQueryable<T>继承自IEnumerable,因此拥有丰富的扩展方法,可以完成您从序列中所需的几乎所有内容。特别是,.ToList()将可枚举变为允许有效索引的List<T>

使用未知初始长度的序列时,

.ToList()比更明显的.ToArray()略高一些,因为.ToArray()需要一个额外的副本才能得到一个完全正确的数组尺寸。 (但是数组循环更快,所以这一切都取决于你正在做什么。)

答案 1 :(得分: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)
 });