2011-09-01 113 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()”。

额外的处理了一下,但得到的工作做好。