0

みなさん、おはよう。

ブール値を戻そうとするために使用する次の方法があります。

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」が返される?!?!

4

1 に答える 1

0

このコードは:を返しますIEnumerable<bool>

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

を呼び出すことにより.Any()、IEnumerableにアイテムがあるかどうかを尋ねています。ある場合はtrueを返します。

それが常に何かを見つけるので、あなたが常に真実を取り戻す理由です。

解決策
.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().
于 2010-09-28T10:05:33.177 に答える