0

これは私がやろうとしていることですが、うまくいきません:

HardwareType hwt = new HardwareType { HType = "PC" };
IEnumerable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));
ViewBag.Pcs = Pcs.ToString();

では、IEnumerable を文字列 (またはその他のプリミティブ データ型) に変換して、Razor で使用しようとしたときにコンパイラがエラーを出さないようにするにはどうすればよいでしょうか?

@foreach (var item in ViewBag.Pcs) {
     <li><a href="#" class="btn"><i class="icon-hdd"></i> @item.HType</a></li>
}

ハードウェア クラス:

public class Hardware
    {
        public int Id { get; set; }
        public virtual ICollection<DeviceType> Type { get; set; }
        public string AssetTagId { get; set; }
        public virtual ICollection<Manufacturer> Manufacturer { get; set; }
        [Required]
        [StringLength(50)]
        public string ServiceTagId { get; set; }
        [Required]
        [StringLength(50)]
        public string SerialNumber { get; set; }
        [Required]
        [StringLength(75)]
        public string ProductNumber { get; set; }
       // [Required]
        [StringLength(20)]
        public string PurchaseDate { get; set; }
        [StringLength(20)]
        public string WarrantyExpiration { get; set; }
        [Required]
        [StringLength(20)]
        public string WarrantyType { get; set; }
        public virtual ICollection<Location> Location { get; set; }
        public virtual ICollection<HardwareType> HardwareType { get; set; }
        [Required]
        [StringLength(2000)]
        public string Notes { get; set; }
        public string POATag { get; set; }
    }

HardwareType クラス:

public class HardwareType
    {
        public int Id { get; set; }
        [Required]
        [StringLength(128)]
        public string HType { get; set; }
        public virtual ICollection<Hardware> Hardware { get; set; }
    }
4

1 に答える 1

1

問題は、ここで文字列に変換していることにあるように私には見えます:

ViewBag.Pcs = Pcs.ToString();

どうしてそんなことをするのか?ビュー内のシーケンス内の個々のアイテムを反復処理したいようです。次のいずれかを使用します。

ViewBag.Pcs = Pcs;

また

ViewBag.Pcs = Pcs.ToList();

クエリを強制的にマテリアライズしたい場合。

編集:エラーをもう一度見てみると、実際にWhereは問題の節であると思われます。私はあなたが本当に欲しいと思う:

var pcs = db.Hardware.Where(h => h.HardwareType.Any(hwt => hwt.HType == "PC"));
ViewBag.Pcs = pcs.ToList(); // Materialize the query

問題は、hwt値をクエリへの入力として使用しようとしていることです...

于 2012-12-12T17:02:47.520 に答える