Вызов метода из запроса Linq - PullRequest
8 голосов
/ 05 мая 2010

Я использую запрос Linq и вызов метода Like ..

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

вернет нулевое значение.

Означает, что это не будет работать.

как я это решаю.

спасибо ..

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,
    };

Ответы [ 3 ]

11 голосов
/ 05 мая 2010

Если это 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
        };
1 голос
/ 07 февраля 2014
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 также для обновления одного свойства. не нужно выбирать все свойства в следующем запросе.

0 голосов
/ 05 мая 2010

Это не имеет ничего общего с запросом Linq.вам нужно отладить метод objDecryptor.DecryptIt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...