【问题标题】:How can I change my method to achive the following?如何更改我的方法以实现以下目标?
【发布时间】:2012-11-01 17:49:38
【问题描述】:

我有这个方法应该按名称搜索员工集合。 我传递了我想要查找的姓​​氏数组,该方法返回具有这些姓名的员工。很简单。

    public IQueryable<Employee> GetEmployees(IEnumerable<string> lastNames)
    {
        var query = Employees.Where(e => lastNames.Contains(e.LastName));
        return query;
    }

现在我需要更改方法,以便我可以传递 partial 姓氏数组,并获取姓氏与部分姓氏匹配的所有员工。

    public IQueryable<Employee> GetEmployees(IEnumerable<string> partialLastNames)
    {
        // the code above will not work
    }

因此,如果我有具有以下姓名的员工: 西格妮·韦弗、Amanada Beaver、约翰·史密斯、简·马西森

我通过 partialLastName 数组 ["aver", "math"],它会返回一个匹配的查询:Sigourney Weaver、Amanada Beaver 和 Jane Matheson

我该怎么做?

谢谢。

【问题讨论】:

    标签: linq lambda iqueryable


    【解决方案1】:

    我想你正在寻找这个

    public IQueryable<Employee> GetEmployees(IEnumerable<string> partialLastNames)
    {
          var query = Employees.Where(e => partialLastNames.Any(x => e.LastName.Contains(x)));
          return query;
    }
    

    【讨论】:

    • 您不需要担心他们正在寻找的混合大小写匹配吗?
    • 太棒了!非常感谢你 !!实际上在原始功能中,我需要按部分员工编号(数字)进行搜索。所以我会没事的。谢谢。
    • 虽然这种方法有效,但只能达到一定长度的 partialLastNames。数组中大约有 48-49 个元素。当我传递 50 个字符串时,会抛出异常:您的 SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询。我相信,因为这个 LINQ 表达式为每个字符串使用 UNION 创建的 SQL 查询并达到了 SQL 查询的最大嵌套级别。需要另一种方法...
    • @Sigourney_Weaver - 我建议提出一个新问题,
    猜你喜欢
    • 2020-01-14
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多