Проблема Bool - изменение значения - PullRequest
0 голосов
/ 28 сентября 2010

Утро всем.

У меня есть следующий метод, который я использую, чтобы попытаться вернуть bool:

public static bool GetShowCatSubProdStatus(string memberid, string username)
    {
        MyEnts showcatsubprodstatus = new MyEnts.PDC_VDSOREntities35();

        var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
                where p.MemberID == memberid && p.UserName == username
                select p.ShowCatSubProd;

        return r.Any();
    }

Когда я вызываю этот метод и отлаживаю его, результатправильный.Однако, когда я запускаю этот метод при загрузке страницы, хотя результат метода возвращает правильный результат, когда я перехожу, логическое значение изменяется!

 bool showcatsubprodstatus = MyEnts.GetShowCatSubProdStatus(_memberid, _username);

        if (showcatsubprodstatus != true)
        {
            panCatSubProd.Visible = false;
        }

Может кто-нибудь объяснить, что здесь происходит и какЯ могу решить эту загадку?!

PS: Извините за то, что толстый.

РЕДАКТИРОВАТЬ - Право, сузил его до переменной.Всегда возвращается значение true независимо от результата метода?!?!

1 Ответ

0 голосов
/ 28 сентября 2010

Этот фрагмент кода возвращает IEnumerable<bool>:

var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
        where p.MemberID == memberid && p.UserName == username
        select p.ShowCatSubProd;

Вызывая .Any(), вы спрашиваете, есть ли какие-либо элементы в IEnumerable.Если есть, вы возвращаете истину;

Именно поэтому вы всегда возвращаете истину, потому что она всегда что-то находит..SingleOrDefault (), который возвращает единственный элемент (если он есть) или возвращает значение по умолчанию этого типа.

var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
        where p.MemberID == memberid && p.UserName == username
        select p.ShowCatSubProd;
return r.SingleOrDefault(); //assuming p.ShowCatSubProd is a bool and not a Nullable<bool> else you need to adjust your return type or cast it to a boolean using .GetValueOrDefault().
...