К сожалению, нет простого способа перейти от строки к int, но есть способ перейти от int к строке ..
Я считаю, что это должно работать:
var vessels = db.Vessels
.Where(v => claims.Any(c => SqlFunctions.StringConvert((double)v.Id) == c.ClaimValue))
.ToList();
Первоначальная ошибка заключается в том, что Linq2EF передает int.Parse, который, в свою очередь, пытается перейти к БД и не может сформировать допустимый SQL для объединения, поэтому он ошибается.Int.Parse для Select может быть обработан EF, когда он оценивает результаты, так что ваш обходной путь будет работать, но загружает весь набор идентификаторов для заявок на «сосуд» в память в .ToList ().Это вряд ли будет проблемой, если вы не имеете дело с очень большими наборами данных или большим количеством запросов.
В идеале, хотя ваши типы FK должны соответствовать PK, к которым они будут присоединены, чтобы избежать подобных проблемНо с существующими базами данных вам часто приходится брать то, что вам дают.:)