1

私は次の機能を持っています

 public List<Object> GetEventsForAdmin()
    {
        using (var dbEntities = new CapeledEntities())
        {
            return (from e in dbEntities.Events
                    join lnk in dbEntities.linkEventCategories on e.EventId equals lnk.EventId
                    join cat in dbEntities.Categories on lnk.CategoryId equals cat.CategoryId
                    orderby e.StartDateTime descending
                    select new { 
                                    e.EventId, 
                                    EventTitle =  e.Title,
                                    e.StartDateTime,
                                    e.Description, 
                                    CatTitle = cat.Title 
                   }
            ).ToList<Object>();
        }
    }

私は使っている

  var eventHelper = new BusinessLogic.DatabaseAccess.Helpers.BLEvents();
  foreach (var myEvent in eventHelper.GetEventsForAdmin())
  {
       txtTitle.text = myEvent.CatTitle;
       txtDescription.text = myEvent.description;
   }

ただし、myEvent.CatTitle と myEvent.description が見つかりません。

  }
4

3 に答える 3

1

私の知る限り、3つの方法が考えられるようです。

1) 使用Dynamic(.Net 4.0 以上が必要)

foreach (dynamic myEvent in eventHelper.GetEventsForAdmin())

2)代わりに独自のタイプ(おそらくクラス)を作成しますanonymous type

3)3番目のものは、ここでCastByExample見つけることができるものを使用するトリッキーなものです

object obj = eventHelper.GetEventsForAdmin();
var events = CastByExample(obj, new[] { 
                                    new { EventId = 0, 
                                          EventTitle = "",
                                          StartDateTime = DateTime.MinValue,
                                          Description = "", 
                                          CatTitle = ""
                                        }
                                      }.ToList());
foreach (var item in events)
{
    Console.WriteLine(item.EventId);
}

private static T CastByExample<T>(object obj, T example)
{
    return (T)obj;
}

4) @KingKing がコメントで示唆したようにReflection、リフレクションを介してそれを行うこともできませんでしたが、それはこの問題の良い考えではありません。

利用可能な方法はたくさんあると言われているので、この問題の理想的な解決策である方法 2 を提案します。

于 2013-10-12T16:53:16.397 に答える