我正在尝试通过使用电子邮件过滤来显示combobox
中的电子邮件。我的问题是我的数据在用户表中加密了。
当我尝试解密它时会出现此错误:
LINQ to Entities无法识别方法' System.String Decrypt(System.String,System.String)'方法,并且此方法无法转换为商店表达式
如何解决此错误?
这是我的Lookup类
public class Lookup
{
public long boundvalue { get; set; }
public string boundtext { get; set; }
}
以下是我要过滤的代码
public IEnumerable<Lookup> getUser(string fText)
{
var ret = new List<Lookup>
{
new Lookup
{
boundvalue = 0,
boundtext = ""
}
};
if (!string.IsNullOrEmpty(fText))
{
ret.AddRange(_entities.Users.Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim()))
.Select(select => new Lookup
{
boundvalue = select.UserID,
boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)),
}));
}
return ret;
}
答案 0 :(得分:2)
请记住,最后将Linq to Entities查询转换为sql表示法,但在执行该转换时,错误所指的是System.String Decrypt
。这就是为什么我担心你不能在服务器端应用过滤器,你需要在内存中进行。为此,请使用AsEnumerable
扩展方法切换到Linq to Objects
ret.AddRange(_entities.Users.AsEnumerable().Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim()))
.Select(select => new Lookup
{
boundvalue = select.UserID,
boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)),
}));
答案 1 :(得分:0)
我设法得到一个解决方案,这只是一个小问题。
我想包括ToList()
ret.AddRange(_entities.Users.ToList().Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim()))
.Select(select => new Lookup
{
boundvalue = select.UserID,
boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty),
Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)),
}));
现在正在运作。