【问题标题】:How to use .Where with lambda / IQueryable如何使用 .Where 与 lambda / IQueryable
【发布时间】:2014-04-10 19:22:02
【问题描述】:

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

我在创建的departmentList 中注释掉了//department.IdAgency = reader.GetByte(2); 行。当我删除 // 时,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&lt;string&gt; 查询,它有效。但是如何使用.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 子句位于排序之前。但是“不起作用”是什么意思?
  • 我尝试在 OrderBy 之前插入 Where,结果相同。当我使用 Where 时,我得到一个空列表。我检查了 x.IdAgency 是否包含正确的号码。
  • 这仍然没有回答“不起作用”。
  • 我的意思是“不起作用”。我的 DropDownList 中的结果是空的。当我不使用 Where 时,DropDownList 包含数据库表中的所有内容。我希望你能理解我。
  • 是的,所以在你的问题中写下这个而不是不起作用,它会帮助人们帮助你;)现在,什么是 idAgencySelected,在调试时,idAgencySelected[0] 中有什么?您的数据中有具有该值的东西吗?

标签: c# linq lambda iqueryable


【解决方案1】:

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

所以,对于一些IQueryable&lt;string&gt;...

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2017-08-04
    • 2020-01-11
    • 2015-04-21
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多