我希望在不使用IEnumerable
的情况下从特定位置获取forloop
的元素。
我必须通过Varible从IEnumerable
获取元素:
int position;
public class Employee
{
public int EmployeeId { get; set; }
public int Skillssetpoints { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> Date { get; set; }
}
int position=2;
IEnumerable<Employee> data = (from c in context.Employee select c);
data = data.ElementAtOrDefault(position);
上面一行出错:无法将类型Employee隐式转换为System.Collection.Generic.IEnumerable。
但我想从data variable
中的特定位置获取数据只是因为我的所有代码都在这个变量data
处理。
注意:如果我的位置变量值大于0,那么我将从数据变量中找到具有此位置的数据,但如果位置变量= 0则我将返回Ienumerable。
怎么做???
答案 0 :(得分:2)
IEnumerable<Employee> data= null;
IEnumerable<Employee> tempList = (from c in context.Employee select c);
if(position==0)
data = tempList;
else if(position >0)
{
data = templist.Skip(position -1).Take(1);
}
您收到错误是因为您试图将单个对象存储到IEnumerable类型的变量中。
通过结合Yogi的答案你可以做到以下几点。
答案 1 :(得分:2)
您可以使用Linq
例如,如果你需要在第2位获得项目,只需使用 -
data = data.Skip(1).Take(1);
或根据您的查询 -
data = data.Skip(position - 1).Take(1);
答案 2 :(得分:1)
if(position > 0)
data = GetDataAt(data,position);
GetDataAt:
private static IEnumerable<T> GetDataAt<T>(IEnumerable<T> dataItems, int position)
{
yield return dataItems.ElementAtOrDefault(position);
}