【问题标题】:Linqdatasource filter post database retrievalLinqdatasource 过滤后数据库检索
【发布时间】:2011-09-01 03:42:36
【问题描述】:

感谢您提供的任何见解!

非常简单,我正在使用 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;
}

【问题讨论】:

  • 你能反转事情并加密你想要比较的姓氏,而不是解密然后与纯文本比较吗?类似 .Where(w => w.LastName == aes.EncryptString(LastNameToTestFor);
  • 啊——好主意,除非我需要进行完全匹配搜索。我需要能够使用'starts-with',根据名字的第一个字母等进行过滤。谢谢你的想法!

标签: .net linq-to-sql gridview encryption


【解决方案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()”。

一些额外的处理,但完成工作。

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 2021-06-18
    • 2013-07-09
    • 2020-08-31
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多