编辑:代码工作正常,这是另一个错误。
我在创建的//department.IdAgency = reader.GetByte(2);
中注释了departmentList
行。当我删除//
后IQueryable<string>
.Where
工作正常。很抱歉给您带来不便!
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);
答案 0 :(得分:1)
所有.Where()
调用都会对列表中的每个元素应用过滤方法,从而返回一个新的IEnumerable。
所以,对于某些IQueryable<string>
...
IEnumerable<string> results = SomeStringList.Where(s => s.Contains("Department"));
...您将获得包含单词department的字符串列表。
换句话说,通过传递一些可以应用于可查询集合的成员的布尔条件,您将获得原始集合的子集。
您的第二个代码块不起作用的原因是因为您正在调用不属于string
的方法或属性。您可能需要考虑查询更复杂的类型(如果它有标识符数据),然后获取元素的名称并将它们添加到某个列表中。