Neo*_*Neo 6 c# linq linq-to-objects linq-to-entities entity-framework
我正在使用LINQ to Entity并收到错误
方法无法转换为商店表达式
var myStrings = from keys in keyTable
join values in valuesTable
on keys.ID equals values.FK_TableKey
select new NewModel
{
Value = values.Value,
Hash = CalculateHash(string.Format("{0}_{1}", keys.Key, keys.Context))
};
Run Code Online (Sandbox Code Playgroud)
//我试图转换成LINQ语法,如下所示
//如何计算可用于LINQ to Entity的哈希值?
//方法
public string CalculateHash(string input)
{
if (input == null)
return null;
//calculate MD5 hash
var md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
var sb = new StringBuilder();
foreach (byte t in hash)
sb.Append(t.ToString("P2"));
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
由于哈希值应该在.NET端计算,你可以AsEnumerable()
在产生"原始数据"的部分之后添加调用,然后计算RDBMS之外的其余部分,如下所示:
var rawStrings = from keys in keyTable
join values in valuesTable
on keys.ID equals values.FK_TableKey
select new {
Value = values.Value,
keys.Key,
keys.Context
};
var myStrings = rawStrings.AsEnumerable().Select(t => new NewModel {
Value = t.Value,
Hash = CalculateHash(string.Format("{0}_{1}", t.Key, t.Context))
});
Run Code Online (Sandbox Code Playgroud)
第一个查询在RDBMS端运行,并生成用于计算的密钥和上下文Hash
.第二个查询使用原始数据计算所需的输出.