正如其他人在评论中指出的那样,您必须解析该值的事实应该是一个危险信号,即您应该在数据库中使用其他数据类型。
幸运的是,有一种解决方法,可以强制查询由LINQ到对象而不是LINQ到实体执行。不幸的是,这意味着潜在地将大量数据读入内存
根据您的其他评论,“值”列中的值不能保证为数字。因此,您必须尝试将值转换为数字,然后根据该转换的失败/成功来处理事情:
return message
.Properties
.AsEnumerable()
.Any(p =>
{
var val = 0;
if(int.TryParse(p.Value, out val))
{
return p.Key == name &&
val >= values[0] &&
val <= values[1])
}
else
{
return false;
}
);
您实际上可能能够在数据库中解决这个问题。我不确定这是否对您有用,但您可以试一下:
return message.Properties
.Where(p => p.Key == name && sqlFunctions.IsNumeric(p.Value) > 0)
.Any(p => Convert.ToInt32(p.Value) >= values[0] &&
Convert.ToInt32(p.Value) <= values[1]);