来自Linq查询的调用方法

Jit*_*dav 8 c# linq wpf

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

oPwd = objDecryptor.DecryptIt((c.Password.ToString())
Run Code Online (Sandbox Code Playgroud)

它将返回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,
    };
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 11

如果是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,
        };
Run Code Online (Sandbox Code Playgroud)

然后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
        };
Run Code Online (Sandbox Code Playgroud)