如何使用。与lambda / IQueryable一起使用

时间:2014-04-10 19:22:02

标签: c# linq lambda iqueryable

编辑:代码工作正常,这是另一个错误。

我在创建的//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);

1 个答案:

答案 0 :(得分:1)

所有.Where()调用都会对列表中的每个元素应用过滤方法,从而返回一个新的IEnumerable。

所以,对于某些IQueryable<string> ...

IEnumerable<string> results = SomeStringList.Where(s => s.Contains("Department"));

...您将获得包含单词department的字符串列表。

换句话说,通过传递一些可以应用于可查询集合的成员的布尔条件,您将获得原始集合的子集。

您的第二个代码块不起作用的原因是因为您正在调用不属于string的方法或属性。您可能需要考虑查询更复杂的类型(如果它有标识符数据),然后获取元素的名称并将它们添加到某个列表中。