2013-02-15 29 views
0

我在的形式獲取數據:foreach所IEnumerable的<dynamic>類型的數據

[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} } 
    . 
    . 
    . 

我不得不寫訪問的值rkeypkeyckey另一種方法。不幸的是,我不能以線性ForEachParallel.ForEach訪問它們。我搜索了,但我還沒有找到解決方案來訪問我的參數。有人建議將其轉換爲Dictionary,但我不確定這是否是一條好路徑。它必須比這更簡單。

,我已編寫的代碼是這樣的:

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(); 
    } 
} 

可變films產生IEnumerable<dynamic>類型的數據。

+0

你可以發佈你已經試過的代碼嗎? – DiskJunky 2013-02-15 20:43:11

+5

什麼是阻止你創建一個合適的類來保存這些值而不是依賴動態? – 2013-02-15 20:44:04

+0

你認爲'dynamic'比使用'Dictionary'更簡單嗎?這表明你沒有正確理解「動態」實際上在做多少事情,幾乎肯定不應該使用它。 – Servy 2013-02-15 20:45:09

回答

1

工作對我來說:

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); 
} 

這樣我可以改造力度強類型的對象,然後我可以做我想做的事情與他們

+0

我會試一試,並會告訴你它是否適用於我的情況。不管怎麼說,多謝拉。 – user843681 2013-02-16 03:33:30

0

你必須創建一個像

public class Thing 
    { 
     public string rkey { get; set; } 
     public string pkey { get; set; } 
     public DateTime ckey { get; set; } 
    } 

然後使這樣的任務:

public Task<IEnumerable<Thing>> .... 

然後我可以訪問pkey,rkey和ckey。

相關問題