从LINQ查询循环传递var?

时间:2016-06-07 04:56:00

标签: c# linq

我的最终目标是遍历LINQ查询,但我甚至不确定我的查询是否正在做我期待的事情。

以下查询假定只从SQL Server DB中选择不同的名称。它不会抛出错误,但我无法测试它,因为我似乎无法使语法正确循环变量。

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct();

我的for循环在下面,但显然不正确。我在staffNames.lenghtstaffNames[i]

上都显示红色下划线
            for (int i = 0; i < staffNames.lenght; i++)
            {
                MessageBox.Show(staffNames[i]);
            }

我也试过这个,只是为了测试查询的结果是否正确而没有运气。同样在这里item

             foreach (var item in staffNames)
            {
                MessageBox.Show(item);
            }

enter image description here

更改了所有内容仍然是错误,

enter image description here

3 个答案:

答案 0 :(得分:3)

简单的foreach将成功,

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct();

foreach(var name in staffNames)
{
   MessageBox.Show(name.ToString());
}

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct().ToList();

for (int i = 0; i < staffNames.Count; i++)
{
     MessageBox.Show(staffNames[i].ToString());
}

需要注意的是,staffNames为IQueryable,除非您枚举,否则不会包含任何数据(循环播放)。这就是您没有Length财产或indexer [i]的原因。但是,IQueryable实现了IEnumerable。因此,您可以使用foreach对其进行迭代。只有当您开始迭代它时(使用foreachToList(),然后数据库调用已完成

答案 1 :(得分:2)

您需要返回一个实现IEnumerable接口

的结果

因此,对于此实例,我添加了ToList(),因此我可以枚举结果。

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct().ToList();

所以你可以使用以下代码进行迭代:

foreach (var item in staffNames)
  {
      MessageBox.Show(item.ToString());
  }

答案 2 :(得分:2)

MessageBox只能显示字符串。问题是你给它一个错误的参数类型。试试MessageBox.Show(staffNames[i].ToString()); MessageBox.Show(item.ToString());