2016-05-26 9 views
0
の定義が含まれていません

私はEF6を使用していて、いくつかのLINQ結合を行い、新しい構造をビューに渡しています。問題はそれからMicrosoft.CSharp.RuntimeBinder.RuntimeBinderExceptionを投げたことです。これらの新しいものはstructures are internalに参加しています。私は解決策それを参照してくださいLINQ Microsoft.CSharp.RuntimeBinder.RuntimeBinderExceptionに参加してください: 'オブジェクト'には

C#

var carMains = this.DatabaseManager.carClaims.Join(this.DatabaseManager.carConvictions, l => l.request_id, r => r.request_id, (l, r) => new { l.claim_amount, r.conviction_driver }).Take(10); 
return View("CarJoin", carMains.ToList()); 

ビュー

@model dynamic 
@foreach (var m in Model) 
{ 
    <br> 
    <div>@(m.claim_amount ?? "")</div> 
    <br> 
    <div>@(m.conviction_driver ?? "")</div> 
    <br> 
} 

の方法は、それぞれのオブジェクトを作成することで参加し、強く私たちのように非常に時間がかかるだろう見解を入力しました200以上のエンティティを持つ複数のデータベースモデルを話しています。

誰かがすでにこのような状況に陥っていると確信していますし、おそらく時間がかかります。 明示的に定義しなくても、構造体をビューに渡すにはどうしたらいいですか?その後、クエリが追加.ToList().Select(o => o.ToExpando());を取得

答えて

0

は1つがExpandoObjectにキャストすることができます列挙した後、自分自身に

を選別して、ビューには、C#で

public static class ExtensionMethods 
{ 
    public static ExpandoObject ToExpando(this object obj) 
    { 
     IDictionary<string, object> expando = new ExpandoObject(); 
     foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(obj)) 
     { 
      var value = propertyDescriptor.GetValue(obj); 
      expando.Add(propertyDescriptor.Name, value == null || new[] 
      { 
       typeof (Enum), 
       typeof (String), 
       typeof (Char), 
       typeof (Guid), 
       typeof (Boolean), 
       typeof (Byte), 
       typeof (Int16), 
       typeof (Int32), 
       typeof (Int64), 
       typeof (Single), 
       typeof (Double), 
       typeof (Decimal), 
       typeof (SByte), 
       typeof (UInt16), 
       typeof (UInt32), 
       typeof (UInt64), 
       typeof (DateTime), 
       typeof (DateTimeOffset), 
       typeof (TimeSpan), 
      }.Any(oo => oo.IsInstanceOfType(value)) 
       ? value 
       : value.ToExpando()); 
     } 

     return (ExpandoObject)expando; 
    } 
} 

をダイナミック

はExpando拡張子を処理するために喜んでいるでしょうlike:

var carMains = 
      this.DatabaseManager.GetEntities<carClaims>() 
       .Join(this.DatabaseManager.GetEntities<carConvictions>(), l => l.request_id, r => r.request_id, (l, r) => new {l.claim_amount, r.conviction_driver}) 
       .Take(10) 
       .ToList() 
       .Select(o => o.ToExpando()); 
     return View("CarJoin", carMains.ToList()); 

ビューコードはまったく変更されません。

希望すれば、時間を節約できます。

関連する問題