来自Linq查询的调用方法

我正在使用Linq查询和调用方法。

oPwd = objDecryptor.DecryptIt((c.Password.ToString()) 

它将返回null值。

意味着这不起作用。

我如何解决这个问题。

谢谢..

 var q = from s in db.User join c in db.EmailAccount on s.UserId equals c.UserId join d in db.POPSettings on c.PopSettingId equals d.POPSettingsId where s.UserId == UserId && c.EmailId == EmailId select new { oUserId = s.UserId, oUserName = s.Name, oEmailId = c.EmailId, oEmailAccId = c.EmailAccId, oPwd = objDecryptor.DecryptIt(c.Password.ToString()), oServerName = d.ServerName, oServerAdd = d.ServerAddress, oPOPSettingId = d.POPSettingsId, }; 

如果是LINQ-to-SQL或Entity Framework。 您需要将其分解为步骤(因为它无法在数据库中执行)。 例如:

 var q = from s in db.User join c in db.EmailAccount on s.UserId equals c.UserId join d in db.POPSettings on c.PopSettingId equals d.POPSettingsId where s.UserId == UserId && c.EmailId == EmailId select new { oUserId = s.UserId, oUserName = s.Name, oEmailId = c.EmailId, oEmailAccId = c.EmailAccId, oPwd = c.Password, oServerName = d.ServerName, oServerAdd = d.ServerAddress, oPOPSettingId = d.POPSettingsId, }; 

然后使用AsEnumerable()打破后端存储的“组合”:

 var query2 = from row in q.AsEnumerable() select new { row.oUserId, row.oUserName, row.oEmailId, row.oEmailAccId, oPwd = objDecryptor.DecryptIt(row.oPwd), row.oServerName, row.oServerAdd, row.oPOPSettingId }; 
 var q = from s in db.User join c in db.EmailAccount on s.UserId equals c.UserId join d in db.POPSettings on c.PopSettingId equals d.POPSettingsId where s.UserId == UserId && c.EmailId == EmailId select new { oUserId = s.UserId, oUserName = s.Name, oEmailId = c.EmailId, oEmailAccId = c.EmailAccId, oPwd = c.Password, oServerName = d.ServerName, oServerAdd = d.ServerAddress, oPOPSettingId = d.POPSettingsId, }; foreach (var item in q) { item.oPwd = objDecryptor.DecryptIt(row.oPwd), } 

我们也可以使用foreach循环来更新单个属性。 不需要在下一个查询中选择所有属性。

这与Linq查询无关。 你需要调试方法objDecryptor.DecryptIt