String.IndexOf comparisons to -1 return incorrect results

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • None
    • None
    • Dotnet Drivers
    • None
    • None
    • None
    • None
    • None
    • None

      For example:

      context.AddRange(
          new Customer { CustomerID = "1", City = "abc" },
          new Customer { CustomerID = "2", City = "def" },
          new Customer { CustomerID = "101", City = "ghi" },
          new Customer { CustomerID = "102", City = "jkl" });
      
      context.SaveChanges();
      
      var results = context.Set<Customer>().Where(c => c.City.IndexOf("e") != -1).ToList();
      

      This should match 1 Customer, but. all 4 are returned.

      Repro:

      using var context = new SomeDbContext();
      context.Database.EnsureDeleted();
      
      context.AddRange(
          new Customer { CustomerID = "1", City = "abc" },
          new Customer { CustomerID = "2", City = "def" },
          new Customer { CustomerID = "101", City = "ghi" },
          new Customer { CustomerID = "102", City = "jkl" });
      
      context.SaveChanges();
      
      var results = context.Set<Customer>().Where(c => c.City.IndexOf("e") != -1).ToList();
      Console.WriteLine(results.Count);
      foreach (var result in results)
      {
          Console.WriteLine($"Found {result} {result.City}");
      }
      
      public class SomeDbContext : DbContext
      {
          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
              => optionsBuilder
                  .UseMongoDB("mongodb://localhost:27017", "SomeDb4")
                  .EnableSensitiveDataLogging()
                  .LogTo(Console.WriteLine, LogLevel.Information);
      
          protected override void OnModelCreating(ModelBuilder modelBuilder)
          {
              modelBuilder.Entity<Customer>().ToCollection("Customers");
          }
      }
      
      public class Customer
      {
          public string CustomerID { get; set; }
          public string City { get; set; }
      }
      

            Assignee:
            Unassigned
            Reporter:
            Arthur Vickers
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: