编辑:代码运行良好,这是另一个错误。
我在创建的departmentList
中注释掉了//department.IdAgency = reader.GetByte(2);
行。当我移除//
时,则具有.Where
的IQueryable<string>
工作良好。很抱歉给您带来不便!
static List<Department> CreateDepartmentList(IDataReader reader)
{
List<Department> departmentList = new List<Department>();
Department department = null;
while (reader.Read())
{
department = new Department();
department.Id = reader.GetByte(0);
department.Name = reader.GetString(1);
//department.IdAgency = reader.GetByte(2);
if (!reader.IsDBNull(3))
{ department.IdTalkGroup = reader.GetInt16(3); }
departmentList.Add(department);
}
return departmentList;
}
原始问题:
我有一个IQueryable<string>
查询,它有效。但是我该如何使用.Where
呢?
IQueryable<string> query = departmentList.AsQueryable()
.OrderBy(x => x.Name)
.Select(x => x.Name);
我试过这个,但它不起作用:
IQueryable<string> query = departmentList.AsQueryable()
.OrderBy(x => x.Name)
.Where(x => x.IdAgency == idAgencySelected[0])
.Select(x => x.Name);
.Where()
调用所做的只是将一个筛选方法应用于列表中的每个元素,从而返回一个新的IEnumerable。
所以,对于一些IQueryable<string>
。。。
IEnumerable<string> results = SomeStringList.Where(s => s.Contains("Department"));
你会得到一个包含单词department的字符串列表。
换句话说,通过向它传递一些可以应用于可查询集合的成员的布尔条件,您可以获得原始集合的子集。
第二个代码块不起作用的原因是,您正在调用一个不属于string
的方法或属性。如果更复杂的类型有标识符数据,您可能需要考虑对其进行查询,然后获取元素的名称并将其添加到某个列表中。