1

EF Code First を使用して、結合されたテーブルからプロパティにアクセスできません。これが私のホームコントローラーでの私のクエリです:

var pcs = from h in db.Hardwares
    join hwt in db.HardwareTypes 
    on h.HardwareTypeId equals hwt.Id
    where h.HardwareType.HType == "PC"
    select new { Hardware = h, HardwareType = hwt };   

ViewBag.Pcs = pcs.ToList();

ここに私の HardwareTypes クラスがあります:

public class HardwareType
    {
        public int Id { get; set; }
        //[Required]
        //[StringLength(128)]
        public string HType { get; set; }

    }

ここに私のハードウェアクラスがあります:

public class Hardware
    {
        public int Id { get; set; }
        public int HardwareTypeId { get; set;}
        public virtual HardwareType HardwareType { get; set; } 

    }

HTypeLINQ クエリを変更するにはどうすればよいViewBagですか? データベースは正しく生成されているようですが、アクセスできないようですHType。エラーが発生する'object' does not contain a definition for 'HType'

4

1 に答える 1

0

よし、フルリセットの時間だ。チャットに基づいて、次のことを試してください。

1) 元の LINQ クエリを保持しますが、匿名型にしないでください。Hardware および HardwareType プロパティを持つ別のオブジェクト タイプを作成します。これにより、PCS (および ViewBag.PCS) がその特定のタイプのリストになります。

2) View コードに次の foreach ループを挿入します。

foreach (var item in ViewBag.Pcs as List<YourTypeName>)
{
   var htype = item.HardwareType.HType;
}

また、ループのたびに遅延読み込みを実行したくない場合は、コントローラーで次のようにして、エンティティをすぐに読み込むことができます。

var hardwareTypes = pcs.Select(p => p.HardwareType).ToList();

それがうまくいくかどうか教えてください。

于 2012-12-27T22:42:04.963 に答える