C# ForEach on IEnumerable<;动态>;类型数据

C# ForEach on IEnumerable<;动态>;类型数据,c#,dynamic,ienumerable,C#,Dynamic,Ienumerable,我以以下形式获取数据: [0]: { rkey = "100asb", pkey = "100ap0", ckey = {1/6/2013 3:28:09 AM} } [1]: { rkey = "yxq4c", pkey = "100iis", ckey = {1/6/2013 6:38:48 PM} } . . . 我必须编写另一个方法来访问值rkey、pkey和ckey。不幸的是,我无法以线性ForEach或并行方式访问它们。ForEach。我已经搜索了,但没有找到访问我

我以以下形式获取数据:

 [0]: { rkey = "100asb", pkey = "100ap0", ckey = {1/6/2013 3:28:09 AM} }
 [1]: { rkey = "yxq4c", pkey = "100iis", ckey = {1/6/2013 6:38:48 PM} }
  .
  .
  .
我必须编写另一个方法来访问值
rkey
pkey
ckey
。不幸的是,我无法以线性
ForEach
并行方式访问它们。ForEach
。我已经搜索了,但没有找到访问我的参数的解决方案。有些人建议将其转换为
词典
,但我不确定这是否是一条好的途径。它必须比那简单得多

我编写的代码如下所示:

var films = myrollup.GetCompletedMovies(dtstart, dtend).Result;

using (var session = factory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {

        Parallel.ForEach(films, currentFilm =>
        {
            dynamic f = currentFilm;
            lock (myrollup)
            {
                var user = User.GetAsync(f.pkey).Result;
                var record = new FilmAnalytics()
                {
                    UserID = currentFilm.pkey,
                    FilmID = currentFilm.rkey,
                    UserName = user.FirstName,
                    UserLastName = user.LastName,
                    UserAlias = user.Alias,
                    UserEmail = user.Email,
                    UserFacebook = user.FbEmail,
                    Dateofcompletion = currentFilm.ckey
                };
                session.SaveOrUpdate(record);
            }
        });

        transaction.Commit();
    }
}
public Task<IEnumerable<Thing>> ....
变量
films
生成
IEnumerable
类型数据

对我有用:

static void Main(string[] args) {
    IEnumerable<dynamic> films = new dynamic[] { new { rkey = 1, rval = "val1" }, new { rkey = 2, rval = "val2" } };

    foreach (var film in films.Select(f => new { RKey = (int)f.rkey,RValue = (string)f.rval }))
        Console.WriteLine(film.RKey + ":" + film.RValue);
}
static void Main(字符串[]args){
IEnumerable films=new dynamic[]{new{rkey=1,rval=“val1”},new{rkey=2,rval=“val2”};
foreach(电影中的var film.Select(f=>new{RKey=(int)f.RKey,RValue=(string)f.rval}))
控制台写入线(film.RKey+:“+film.RValue);
}

通过这种方式,我可以将动力学转换为强类型对象,然后我可以对它们执行任何操作

 public class Thing
    {
        public string rkey { get; set; }
        public string pkey { get; set; }
        public DateTime ckey { get; set; }
    }
然后让任务如下所示:

var films = myrollup.GetCompletedMovies(dtstart, dtend).Result;

using (var session = factory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {

        Parallel.ForEach(films, currentFilm =>
        {
            dynamic f = currentFilm;
            lock (myrollup)
            {
                var user = User.GetAsync(f.pkey).Result;
                var record = new FilmAnalytics()
                {
                    UserID = currentFilm.pkey,
                    FilmID = currentFilm.rkey,
                    UserName = user.FirstName,
                    UserLastName = user.LastName,
                    UserAlias = user.Alias,
                    UserEmail = user.Email,
                    UserFacebook = user.FbEmail,
                    Dateofcompletion = currentFilm.ckey
                };
                session.SaveOrUpdate(record);
            }
        });

        transaction.Commit();
    }
}
public Task<IEnumerable<Thing>> ....
公共任务。。。。

然后我可以访问pkey、rkey和ckey

你能发布你已经尝试过的代码吗?是什么阻止你创建一个合适的类来保存这些值而不是依赖于动态?你认为
动态
比使用
字典
简单吗?这表明你对
dynamic
实际做了多少事情没有正确的认识,几乎可以肯定你不应该使用它。如果你完全阅读我的文章,你会发现我并不是在建议你这么做。不应该像这样使用dynamic关键字。如果您有动态数据,我建议您使用XML或JSON。我会尝试一下,并让您知道它是否适用于我的情况。谢谢你。