3

重複の可能性:
Razorの動的匿名タイプによりRuntimeBinderExceptionが発生する

私はこの統合言語クエリを持っています

var GruposQ = from lcGrupos in db.Merlin_ConceptosFacturacion_Kit_Componentes
    where lcGrupos.NumIdConcepto == Item.NumIdConcepto & lcGrupos.BitComponenteVariable == true
    select lcGrupos;

var GruposList = from comps in GruposQ
     group comps by
     new
     {
         NumIdGrupoProducto = comps.NumIdGrupoProducto,
     } into g
     select new
     {
         NumIdTransaccion = NumIdTransaccion,
         NumIdGrupoProducto = g.Key.NumIdGrupoProducto,
         NumCantidad = g.Sum(x=>x.NumCantidad),
         Grupo = GruposQ.Where(x => x.NumIdGrupoProducto == g.Key.NumIdGrupoProducto)
     };


ViewBag.CompsKit = GruposList.ToList();

私の問題は、ViewBag.CompsKitから要素を取得しようとしたときです。

@foreach (var myTrans in ViewBag.CompsKit)
{
    // Here it throws an error
    // 'object' does not contain a definition for 'NumIdtransaccion'

    <span>myTrans.NumIdtransaccion</span>
}

しかし、私がこのオブジェクトを調べると、それはすでにプロパティを持っています。

myTrans { NumIdTransaccion = 15460
            , NumIdGrupoProducto = 163
            , NumCantidad = 100,000
            , Grupo = System.Data.Common.Internal.Materialization.CompensatingCollection`1[ParadigmaNet.Areas.Items.Models.Merlin_ConceptosFacturacion_Kit_Componentes] }   dynamic {<>f__AnonymousType7<decimal,decimal?,decimal,System.Linq.IQueryable<ParadigmaNet.Areas.Items.Models.Merlin_ConceptosFacturacion_Kit_Componentes>>}

プロパティにアクセスするにはどうすればよいですか?この集合体で?

4

2 に答える 2

1

Razorビューで「動的」タイプを使用することはできません。

型付きオブジェクトをモデルとして使用する必要があります。

于 2012-12-19T15:50:17.187 に答える
1

単一のクエリでグループ化とフィルタリングを行うことができます。

var numIdConcepto = Item.NumIdConcepto;
var query = from comps in db.Merlin_ConceptosFacturacion_Kit_Componentes
            where comps.NumIdConcepto == numIdConcepto &&
                  comps.BitComponenteVariable
            group comps by comps.NumIdGrupoProducto into g
            select new 
            {
               NumIdGrupoProducto = g.Key,
               NumCantidad = g.Sum(x => x.NumCantidad),
               Grupo = g.ToList()
            };        


ViewBag.CompsKit = query.ToList();
ViewBag.NumIdTransaccion = NumIdTransaccion;

また

  • 単一のプロパティでグループ化するために匿名オブジェクトを作成する必要はありません
  • ブール値をtrue/falseと比較する必要はありません
  • グループ化に単一のプロパティを使用する場合は、g.Keyを使用するだけです。
  • グループ内のアイテムには、すでにグループ化キーと等しいNumIdGrupoProductoがあります
  • クエリ結果の各グループに同じNumIdTransaccionを割り当てる代わりに、その値を渡して個別に表示します。ViewBag.NumIdTransaccion = NumIdTransaccion

意見:

<span>ViewBag.NumIdTransaccion</span>

@foreach(var item in ViewBag.CompsKit)
{
    <span>@item.NumIdGrupoProducto</span>
    <span>@item.NumCantidad</span>
}

このビューのViewModelも作成することを検討してください。これにより、タイプミスについて安全になり、コンパイル時にそのようなエラーがすべて解消されます。

于 2012-12-19T15:53:39.413 に答える