如何使用.Where与lambda/IQueryable一起使用



编辑:代码运行良好,这是另一个错误。

我在创建的departmentList中注释掉了//department.IdAgency = reader.GetByte(2);行。当我移除//时,则具有.WhereIQueryable<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的方法或属性。如果更复杂的类型有标识符数据,您可能需要考虑对其进行查询,然后获取元素的名称并将其添加到某个列表中。

相关内容

  • 没有找到相关文章

最新更新