我的最终目标是遍历LINQ查询,但我甚至不确定我的查询是否正在做我期待的事情。
以下查询假定只从SQL Server DB中选择不同的名称。它不会抛出错误,但我无法测试它,因为我似乎无法使语法正确循环变量。
var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct();
我的for循环在下面,但显然不正确。我在staffNames.lenght
和staffNames[i]
for (int i = 0; i < staffNames.lenght; i++)
{
MessageBox.Show(staffNames[i]);
}
我也试过这个,只是为了测试查询的结果是否正确而没有运气。同样在这里item
foreach (var item in staffNames)
{
MessageBox.Show(item);
}
更改了所有内容仍然是错误,
答案 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
对其进行迭代。只有当您开始迭代它时(使用foreach
或ToList()
,然后数据库调用已完成。
答案 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());