2011-09-01 5 views
1

감사의 도움을 주셔서 감사합니다!Linqdatasource 필터 게시자 데이터베이스 검색

매우 간단히 말해서 LinqToSql을 사용하여 데이터베이스에서 연락처 집합을 호출합니다. "FirstName"및 "LastName"열 두 개가 암호화됩니다.

나는 포함 된 코드에서 볼 수있는대로 즉시 해독합니다. 그러나 LastName을 기준으로 필터링하려고합니다. 문제는 문에서 비교를 수행하면 암호화 된 값과 텍스트 값을 비교하는 것입니다.

어떻게 든 내 gridview에 대한 결과 데이터를 가져와야합니다. 그런 다음 데이터베이스 값을 기반으로하지 않고 사실 이미 필터링 한 데이터 (및 해독 된 데이터)를 필터링합니다.

아이디어 ?? 감사!

protected void ContactsLDS_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    DatabaseDataContext db = new DatabaseDataContext(); 

    MyAES aes = new MyAES(); 

    var v1 = from s in db.Contacts 
      select new Contact() 
      { 
       ContactId = s.ContactId, 
       FirstName = (s.FirstName == null ? "" : aes.DecryptString(s.FirstName)), 
       LastName = (s.LastName == null ? "" : aes.DecryptString(s.LastName)), 
      }; 

    e.Result = v1; 
} 
+0

암호를 해독하고 일반 텍스트와 비교하는 대신 비교하려는 성을 암호화하고 암호화 할 수 있습니까? 뭔가 같은 .Where (w => w.LastName == aes.EncryptString (LastNameToTestFor); – nycdan

+0

ahh - 그때를 제외하고는 정확한 일치 검색을 수행해야합니다. 'starts-with'를 사용할 수 있어야합니다. 이름의 첫 글자를 기반으로 필터링하는 등의 생각에 감사드립니다! – localman

답변

1

이 두 개의 게시물이 날이 대답 도움 :

Linq "Could not translate expression... into SQL and could not treat it as a local expression."

Gridview using a generic list as DataSource and Auto-generating columns

난 그냥 다음 그 위에 두 번째 쿼리를 실행, 시작하는 암호화 된 형식의 데이터를 잡아 결국 그것을 해독합니다. 마지막으로, 데이터 필터링을 원할 때, "str.startswith()"를 실행하여 3을 실행했습니다.

약간의 추가 처리가 있지만 작업이 완료됩니다.