2012-05-05 8 views
-2

나는 두 개의 열, 키워드 1과 키워드 2를 포함하는 프론트 엔드를 데이터베이스라는 단일 필드 (키워드로 구분됨)에 넣습니다. 지금은 자동 완성 텍스트 상자와 같은 키워드를 검색 화면을 지금 순서로 채울하기 위해 지금, DB에서 하나의 값을 얻을 필요가 그래서 뭔가 같은이쉼표로 구분 된 DB에서 고유 값을 선택하는 방법은 무엇입니까?

Keywords 
A 
A 
A,B 
B,C 
C,E 
D,K 

을 채 웁니다 하나의 listItem 같은 것을 필요로합니다.

Keywords 
A 
B 
C 
D 
k 

프런트 엔드에 포함 및 복제되지 않도록합니다. 나는 SQL에별로 익숙하지 않다. 내가 알고있는 한 가지 방법은 %entered keywords%과 같은 DB에서 고유 한 값을 얻고 LINQ를 사용하여 쉼표로 구분 한 다음 고유 한 값을 얻는 것이다. 그러나 그것은 길어진 길일 것입니다.

모든 제안은 높이 평가 될 것입니다. 사전에

감사합니다.

+2

데이터베이스 스키마에 결함이 있습니다. 별도의 표에 키워드를 저장 한 다음 특정 키워드와 키워드를 연결하는 상호 참조 테이블을 만들어야합니다. –

+0

값은 쉼표로 구분되어 데이터베이스에 저장됩니까? – HW90

+0

@ HW90 예 실제로 프런트 엔드에서 키워드 1과 키워드 2를 모두 병합하고 쉼표로 구분하여 키워드 인 하나의 DB 필드에 입력하십시오. – Vishal

답변

1

에 의해 문자열 분할 및 Linq에 그룹을 사용하여 그들을 얻기하지만 별개의 키워드로 끝 대안 대답은 :

List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" }); 

var splitted = yourKeywords 
    .SelectMany(item => item.Split(',')) 
    .Distinct(); 

이 직선에 대해 작동하지 않습니다 그래도 DB. Split은 SQL에 상응하지 않기 때문에 SelectMany를 수행하기 전에 DB 내용을 메모리로 읽어야합니다. 그러면 모양은 다음과 같습니다

var splitted = db.Keywords 
    .AsEnumerable() 
    .SelectMany(item => item.Split(',')) 
    .Distinct(); 
+0

감사합니다. Mike the 첫 번째 부분은 매우 도움이되었습니다. 예를 들어 List 을 만들고 데이터 판독기를 반복 한 다음 각 목록을이 목록에 추가하고 추가 작업을 수행했습니다. – Vishal

1

어쩌면 조금 늦게

 List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" }); 
     List<string> splitted = new List<string>(); 
     yourKeywords.ForEach(x => splitted.AddRange(x.Split(','))); 
    var t = splitted.GroupBy(x => x); 
관련 문제