Я не верю, что вы можете использовать регулярные выражения с LINQ to Entities. Тем не менее, похоже, что вы просто пытаетесь найти устройства, которые начинаются с «DEVICE», поэтому запрос будет:
return ctx.Devices.Where(d => d.DeviceId.StartsWith("DEVICE"))
.ToList();
РЕДАКТИРОВАТЬ: Если вам на самом деле нужна гибкость регулярного выражения, вам, вероятно, следует сначала получить идентификаторы устройства (и только идентификаторы устройства) обратно к клиенту, а затем выполнить регулярное выражение для них, и, наконец, получить остальные данные, соответствующие этим запросам:
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));
Это предполагает, что на самом деле было бы дорого получить все данные для всех устройств, с которых можно начать. Если это не так уж плохо, это будет более простой вариант. Чтобы принудительно выполнить обработку, используйте AsEnumerable()
:
var devices = ctx.Devices.AsEnumerable()
.Where(d => regex.IsMatch(d.DeviceId))
.ToList();