假设我们有一个具有 int 数组作为其属性之一的类。
public MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public int[] Values { get; set; }
}
我们使用实体框架将其存储在数据库中。我注意到的是 EF 将 Values 属性转换为 varchar(max)。
现在,我们想要做的是查询数据库并返回“Values”包含给定 int 参数的记录。
public List<MyClass> Search(int valueToSearch)
{
return context.MyClasses.Where(x => x.Values.Contains(valueToSearch)).ToList();
}
但是,这会引发 linq-to-sql 不支持 contains 命令的异常。
我也尝试过Where(x => x.Values.Any(y => y == valueToSearch))
,但这引发了同样的异常。
我想这与 EF 将数组转换为 varchar 的事实有关,因此它将无法使用 contains 语句或其他内容。也许单独的值表可以解决问题,但是创建一个只有一个整数属性的类看起来有点愚蠢?
有没有更好的方法来解决这个问题?
我发现很多相反的例子(SQL IN 语句),但这不是我们要找的。我们只有一个整数作为参数,但我们的实体中有几个整数。
我们将 EF5 与 .NET 4.0 一起使用。
谢谢!
编辑
看起来 varchar 是我们自己创建的字符串。因为它是我自己没有编写的代码,所以我没有意识到这一点。该字符串当然会被翻译成varchar。
所以现在问题变成了“存储原始类型数组的最佳方法是什么?” 并且这个问题已经在 SO 上被多次回答(其中一个在评论中提供)。