【问题标题】:Multi column lambda expression多列 lambda 表达式
【发布时间】:2019-07-06 03:08:34
【问题描述】:

在此处完成教程后:
https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

我目前使用以下

userAccesses = userAccesses.Where(s => s.employeeDetail.employeeNumber.ToUpper().Contains(searchValue.ToUpper()));

但是,我想连接 knownas / surname 列,然后对连接的项目执行 contains。

谁能解释/建议一个示例语法?

这是我在下面尝试过的,但我确定我的语法不正确。

userAccesses = userAccesses.Where(s => s.employeeDetail.employeeNumber + " " + s.employeeDetail.knownas + " " + s.employeeDetail.surname).Contains(searchValue);

感谢大家的回复,最终工作版本如下。

userAccesses.Where(x => (x.employeeDetail.employeeNumber + x.employeeDetail.knownas + x.employeeDetail.surname).Contains(searchValue));

【问题讨论】:

    标签: c# linq lambda where-clause


    【解决方案1】:

    搜索连接的列值很奇怪...

    我建议这样:

    var filtered = userAccesses.Where(s => s.employeeDetail.employeeNumber.Contains(searchValue)
                                           || s.employeeDetail.knownas.Contains(searchValue)
                                           || s.employeeDetail.surname.Contains(searchValue));
    

    【讨论】:

      【解决方案2】:

      你应该往这个方向走

      public class Employee
      {
          public string knownas { get; set; }
      
          public string userName { get; set; }
      }
      public void Test()
      {
          List<Employee> employess = new List<Employee>();
          string searchvalue = "test";
      
          var listEmplyer = employess.Where(x => (x.userName + x.knownas).Contains(searchvalue));
      }
      

      【讨论】:

      • 感谢您的回复,一旦我看到下面的行,我就可以使用它来更正我的代码。 employess.Where(x => (x.userName + x.knownas).Contains(searchvalue));
      • 不客气,我尝试给出要遵循的路径,而不是要写的代码^^
      【解决方案3】:

      您只需连接字符串并在该字符串上调用 Contains。

      userAccesses
        .Where(s => $"{s.employeeDetail.employeeNumber} {s.employeeDetail.knownas} {s.employeeDetail.surname}".Contains(searchValue))
      

      如果您需要一个可枚举的字符串作为表达式的结果,您还可以选择使用以下内容:

      userAccesses
        .Select(s => $"{s.employeeDetail.employeeNumber} {s.employeeDetail.knownas} {s.employeeDetail.surname}")
        .Where(s => s.Contains(searchValue))
      

      【讨论】:

      • 感谢您的回复,不幸的是,这对我来说是一个错误。 LINQ to Entities 无法识别方法 'System.String Format(System.String, System.Object, System.Object, System.Object)' 方法,并且此方法无法转换为存储表达式
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多