2011-09-01 115 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

可以扭轉的東西,加密您要比較的,而不是解密,然後比較,以純文本一個名字?像。凡(W => w.LastName == aes.EncryptString(LastNameToTestFor); – nycdan

+0

啊 - 善於思考,除了那麼我需要做精確匹配搜索,我需要能夠使用「開始,用」,根據名字的第一個字母來過濾,等等,謝謝你的想法! – 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

我剛剛結束了斂以加密格式的數據入手,然後運行在它第二次查詢並解密它。最後,當我想過濾數據時,我會運行第三遍,運行「where str.startswith()」。

額外的處理了一下,但得到的工作做好。