2013-10-29 2 views
2

안녕하세요. 데이터를 필터링하는 동안 문제가 있습니다.LINQ to SQL의 데이터 필터링

나는 두 개의 테이블을 가지고 있는데, 하나는 모든 데이터가 저장된 메인 테이블이다. 메인 테이블의 데이터를 필터링하기 위해 키워드가 저장된 다른 테이블이 있습니다.

내가 직면하고있는 문제는 기본 테이블 데이터에 도착하는 키워드를 필터링해야하므로 정확한 검색어를 입력 할 수 없다는 것입니다.

예를 들어 키워드 표에 10 단어가있는 경우 올바르게 필터링 할 수 있도록 이러한 모든 키워드를 철저하게 검색해야합니다.

나는이 질문을 분명히하기를 희망한다. 그것은 대부분의

+1

지금까지 시도한 것을 보여주세요. 또한 테이블을 보는 것이 도움이 될 것입니다. – germi

+0

메인 테이블은 id, link, title 및 description의 4 개 열로 구성됩니다. 키워드 표에는 id와 keyword 만 포함됩니다. 설명에 나타나지 않는 키워드 (모두 포함)가 표시되어야합니다. –

+0

답변을 확인하고 피드백을주십시오 –

답변

2

이 두 Datatable mainDataTable 및 keyWordTable가 있다고 가정 환영에

또한 내가 SQL 용액에 LINQ를 사용하고 있습니다. 아래에 주어진 linq를 사용하십시오.

var matched = from mainTable in mainDataTable.AsEnumerable() 
         join keyTable in keyWordTable.AsEnumerable() on mainTable.Field<int>("ID") equals keyTable.Field<int>("ID") 
         where !mainTable.Field<string>("Description").Contains(keyTable.Field<string>("KeyWord")) 
         select mainTable; 
     if (matched.Count() > 0) 
     { 
      DataTable finalTable = matched.CopyToDataTable(); 
     } 

대체 조금 더러운 것

또한

otherway.

List<string> keywordList = new List<string>(); 
foreach (DataRow row in keyWordTable.Rows) 
{ 
    keywordList.Add(row["KeyWord"].ToString()); 
} 

DataTable finalFilteredTable = mainDataTable.Clone(); 
bool check = false; 
foreach (DataRow row in mainDataTable.Rows) 
{ 
    check = false; 
    string description = row["Description"].ToString(); 

    foreach (string s in keywordList) 
    { 
      if (description.Contains(s)) 
      { 
       check = true; 
       break; 
      } 
     } 

     if (!check) 
     { 
      finalFilteredTable.ImportRow(row); 
     } 
} 
1

개인적으로 나는 다른 방식으로 접근합니다.

키워드가 저장된 테이블에서 키워드를 가져옵니다. 그런 다음 해당 목록을 반복하여 결과 목록을 작성하십시오.

List<tableName>() values = new List<tableNames>(); 

//Grab Keywords into a list 
List<tableWithKey> tableWithKeyWords = database.tableWithKey.Where(which ones you need....).ToList(); 
//go through keyword list and pull back all the matches into a list of lists 
for(int i = 0; i < tableWithKeyWords.Count(); i ++) 
{ 
    values.addrange(database.tableName.Where(j => j.KeyWord = tableWithKeyWords[i].keyword).ToList()); 
}