Using “Match” in a Linq statement

后端 未结 4 1384
南旧
南旧 2020-12-14 22:45

I have a table that has two records (there will be many at runtime). The deviceId of the records are, “DEVICE1” and “DEVICE2”. I want to use a regular expressio

4条回答
  •  北荒
    北荒 (楼主)
    2020-12-14 23:42

    I don't believe you can use regular expressions with LINQ to Entities. However, it looks like you're just trying to find devices which start with "DEVICE", so the query would be:

    return ctx.Devices.Where(d => d.DeviceId.StartsWith("DEVICE"))
                      .ToList();
    

    EDIT: If you actually need the flexibility of a regular expression, you should probably first fetch the device IDs (and only the device IDs) back to the client, then perform the regular expression on those, and finally fetch the rest of the data which matches those queries:

    Regex regex = new Regex(...);
    
    var deviceIds = ctx.Devices.Select(d => DeviceId).AsEnumerable();
    
    var matchingIds = deviceIds.Where(id => regex.IsMatch(id))
                               .ToList();
    
    var devices = ctx.Devices.Where(d => matchingIds.Contains(d.DeviceId));
    

    That's assuming it would actually be expensive to fetch all the data for all devices to start with. If that's not too bad, it would be a simpler option. To force processing to be performed in process, use AsEnumerable():

    var devices = ctx.Devices.AsEnumerable()
                             .Where(d => regex.IsMatch(d.DeviceId))
                             .ToList();
    

提交回复
热议问题