0

EF 4.x を使用して ASP.NET ドロップダウン リストを作成しています。最初に変数を作成します。

CPAS_EM.qryxrefVendorWorker wrkrs;

次に、データを入力します。

        using (CPASEntities sds = new CPASEntities())
        {
            wrkrs = (qryxrefVendorWorker)
                (from w in sds.qryxrefVendorWorkers 
                 where w.VendorID == currVendorID && 
                 ((w.ExpiryDate == null) | (w.ExpiryDate >= currWorkDate)) 
                 select w);
            ddlWorker.DataSource = wrkrs;
            ddlWorker.DataValueField = wrkrs.WorkerID.ToString();
            ddlWorker.DataTextField = wrkrs.WorkerName;
            ddlWorker.DataBind();
        }

「wrkrs = ...」ステートメントで、キャスト エラーを示すエラーが表示されます。

System.InvalidCastException がユーザー コードによって処理され
ませんでした

ここで誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

4

あなたのコード

(from w in sds.qryxrefVendorWorkers 
where w.VendorID == currVendorID && ((w.ExpiryDate == null) | (w.ExpiryDate >= currWorkDate)) 
select w)

実際にはクエリであり、単一のオブジェクトではありません。おそらくFirstOrDefault()、単一の要素を取得するために追加する必要があります。それから、キャストも必要ありません。

于 2013-02-06T20:23:35.713 に答える
0

using スコープの外で変数を宣言する必要があるのはなぜですか? できませんか:

   using (CPASEntities sds = new CPASEntities())
    {
        var wrkrs = (from w in sds.qryxrefVendorWorkers 
                     where w.VendorID == currVendorID 
                       && ((w.ExpiryDate == null) | (w.ExpiryDate >= currWorkDate)) 
                     select w).FirstOrDefault();
        ddlWorker.DataSource = wrkrs;
        ddlWorker.DataValueField = wrkrs.WorkerID.ToString();
        ddlWorker.DataTextField = wrkrs.WorkerName;
        ddlWorker.DataBind();
    }

宣言を完全に削除しますか?

また、user1908061 が言ったように、コレクションではなく単一のオブジェクトを取得するには、FirstOrDefault() も必要です。

于 2013-02-06T20:27:02.700 に答える
0

これを試すことができます:

List<sds.qryxrefVendorWorkers > lstWorkers = 
    (from w in sds.qryxrefVendorWorkers 
     where w.VendorID == currVendorID && 
     ((w.ExpiryDate == null) | (w.ExpiryDate >= currWorkDate)) 
     select w).ToList();


ddlWorker.DataSource = lstWorkers;
ddlWorker.DataValueField = "WorkerID";
ddlWorker.DataTextField = "WorkerName";
ddlWorker.DataBind();

これは のセットを返しqryxrefVendorWorkersます。(簡単に言えば) クエリをオブジェクトにキャストするときに、オブジェクトのセットを単一のオブジェクトにキャストしようとしたため、キャストが失敗しました。qryxrefVendorWorker

于 2013-02-07T03:27:33.903 に答える