int 배열이 속성 중 하나 인 클래스가 있다고합시다.엔티티의 Linq-to-SQL 쿼리 int 배열
public MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public int[] Values { get; set; }
}
우리는 엔티티 프레임 워크를 사용하여 db에 저장합니다. 내가 알아챈 것은 EF가 Values 속성을 varchar (최대)로 변환한다는 것입니다.
지금 우리가 원하는 것은 '값'에 주어진 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 문과 반대되는) 많은 예제를 발견했지만, 우리가 찾고있는 것은 아닙니다. 우리는 하나의 정수를 매개 변수로 가지고 있지만, 우리 엔티티에 여러 정수가 있습니다.
우리는 .NET 4.0에서 EF5를 사용하고 있습니다.
감사합니다.
편집
VARCHAR 우리가 우리 자신을 생성하는 문자열 보인다. 내가 직접 작성하지 않은 코드이므로, 나는 그 사실을 알지 못했습니다. 그 문자열은 varchar로 변환됩니다.
이제 질문은 '기본 유형의 배열을 저장하는 가장 좋은 방법은 무엇입니까?'와 같은 형식으로 변경됩니다. 그 질문은 이미 여기에 여러 번 대답했습니다 (그 중 하나가 코멘트에 제공됩니다).
처음에는 괄호가 일치하지 않습니다 (valueToSearch 뒤에 닫는 괄호 여야 함). –
매우 흥미 롭습니다. 정수 배열을 데이터베이스에 매핑하는 방법을 보여줄 수 있습니까? –
'Values'에 대해 별도의 테이블을 만들어야한다고 생각합니다. –