2009-04-03 2 views
4

이전 프로젝트를 LINQ를 사용하여 마이그레이션하려고하는데 꽤 심각한 문제가 있습니다. 문제는 검색 색인 (동적 속성이있는 CM 시스템)에 동적 테이블 이 있다는 것입니다. 검색 색인에는 검색 가능한 각 속성 {attribute_x, attribute_y, ...}에 대한 열이 있습니다. 이제 문제는 정적으로 어떤 열을 사용할 수 있는지 (또는 검색 인덱스를 나눌 때 어떤 테이블을 사용할 지) 정의 할 수 없다는 것입니다. 따라서이 방법을 즉시 수행해야합니다.동적 테이블에 LINQ to SQL 사용

동적 표현식을 사용해 보았지만 식을 작성하는 데 형식이 필요하며 리플렉션으로 올바른 형식을 생성 할 수 없었습니다. (MemberInfo가 생성되지 않은 것 같습니다).

나는 또한 검색을위한 표현식을 생성 할 수있는 것으로 만족할 수 있습니다 (그러나 이것은 쉬운 일은 아닙니다).

 
var mySearchIndex= db.GetTable(myTableType); 
var query = from p in db.Products from idx in mySearchIndex; 
query = query.Where(
"idx." + attributeName + " > 50.0 && 
idx." + attributeName + "

의 줄에있는 것이 바람직합니다.

누구나이 문제의 해결책을 찾아 냈습니까? 나는 과거 2 일 동안 블로그 포스트와 포럼을 헛되이보고 있었다.

답변

1

당신은 Linq to Dataset을 시도 할 수 있습니다 : 데이터 집합에

LINQ는보다 빠르고 쉽고 DataSet 개체에 캐시 된 데이터를 통해 조회 할 수 있습니다. 특히 LINQ에서 까지 데이터 집합은 쿼리를 단순화하여 개발자가 언어를 사용하는 대신 이라는 쿼리를 프로그래밍 언어 자체에서 쿼리로 작성할 수 있습니다.

+0

Linq to Dataset은 참으로 흥미 롭습니다. 그러나 나는 그것이 쿼리를 결합하지 않고 오히려 정보 클라이언트 측을 처리한다는 것을 이해합니다. 이는 성능에 큰 영향을줍니다. 또는 나는 이것에 대해 틀렸고 실제로 쿼리를 결합합니까? –

+0

내가 가지고있는 한 가지 생각은 Expression 개체에 sql을 삽입 할 수 있다면 Expression이 존재할 수 있으므로 (SearchIndex에서 1을 선택하십시오.),이 작업을 수행 할 수있는 방법을 찾을 수 없었습니다. –

+0

네 말이 맞아. 그것은 클라이언트 측에서 프로세스를 처리합니다. – Keltex

1

저는 LINQ를 사용하여 해결 방법이 있다고 생각하지 않습니다. 적어도 내가들은 적이 있거나 발견 된 것은 아닙니다. 테이블 구조가 변경되고 매번 DataModel을 다시 만들어야하는 경우 LINQ가 중단됩니다.

내가 잘못하면 듣고 싶어합니다. :)

1

당신은 SQL의 디자인에 Linq 밖에서 일하고있다. 그러나 나는 이 정말로 일 필요가 있다고 생각한다. 탐색 할 최선의 방법은 아마도 컨텍스트의 생성자에서 사용할 수있는 XmlMappingSource 일 것입니다. 나는 이걸로 성공했을 때 table renaming을 즉시 처리했다.

매핑 XML에서 데이터베이스의 실제 열 이름은 클래스 속성의 "Name"속성이고 클래스 속성은 "Member"입니다. XML에서이를 변경하면 최종 쿼리를 적절하게 매핑해야합니다.

+0

주말에 이것에 대해 살펴볼 것입니다. 실제로 재미있을 것 같습니다. 코드의 유지 관리 가능성 때문에 LINQ를 통해이 작업을 수행하고 싶습니다. 일부 여분의 배경 작업은 확실히 문제의 가치가있을 것입니다. –

+0

방금이 기술과 Linq와 XML (매핑 xml 변경)의 합류와 강력한 조합을 위해 만들어진 Linq와 SQL (데이터 용)의 합류를 사용한 프로젝트를 완료했습니다. –