2010-05-19 34 views
-1

如何將下面的代碼轉換成拉姆達將代碼轉換成波長/ LINQ(C#3.0)

if (ds != null && ds.Tables.Count > 0) 
      { 
       dtAsset = ds.Tables["AssetData"]; 
       dtCharecteristics = ds.Tables["CharacteristicsData"]; 

       for (int i = 0; i < dtAsset.Rows.Count; i++) 
       { 
        for (int j = 0; j < dtCharecteristics.Rows.Count; j++) 
        { 
         if (dtAsset.Rows[i]["AssetId"].Equals(dtCharecteristics.Rows[j]["AssetId"])) 
         { 
          objAttributesCollection.Add(new Attributes 
          { 
           AttributeCode = Convert.ToString(dtCharecteristics.Rows[j]["AttributeCode"]), 
           TimeSeriesData = fn(Convert.ToDateTime(dtCharecteristics.Rows[j]["StartDate"]), Convert.ToString(dtCharecteristics.Rows[j]["Value"])) 
          }); 

         } 
        } 
        objAssetCollection.Add(new Asset 
        { 
         AssetId = Convert.ToInt32(dtAsset.Rows[i]["AssetId"]), 
         AssetType = Convert.ToString(dtAsset.Rows[i]["AssetCode"]), 
         AttributeCollection = objAttributesCollection 
        }); 
        objAttributesCollection = new List<Attributes>(); 
       } 
      } 

我使用C#3.0

是沒有錯的代碼,但對於爲了學習,我想要這樣做。

感謝

回答

0

這裏有一個建議:

而不是使用.ForEach的,用from,然後select你的循環內創建的項目。

0

我做到了..

if (ds != null && ds.Tables.Count > 0) 
      { 
       dtAsset = ds.Tables["AssetData"]; 
       dtCharecteristics = ds.Tables["CharacteristicsData"]; 
       DataTableExtensions.AsEnumerable(dtAsset).ToList().ForEach(i => 
        { 
         DataTableExtensions.AsEnumerable(dtCharecteristics) 
          .ToList().ForEach(j => 
          { 

           if(i["AssetId"].Equals(j["AssetId"])) 
           { 
            objAttributesCollection.Add(new Attributes 
            { 
             AttributeCode = Convert.ToString(j["AttributeCode"]), 
             TimeSeriesData = fn(
                 Convert.ToDateTime(j["EndDate"]), 
                 Convert.ToString(j["Value"]) 
             ) 
            }); 
           } 

          }); 
         objAssetCollection.Add(new Asset 
         { 
          AssetId = Convert.ToInt32(i["AssetId"]), 
          AssetType = Convert.ToString(i["AssetCode"]), 
          AttributeCollection = objAttributesCollection 
         }); 
         objAttributesCollection = new List<Attributes>(); 
        } 
       ); 
+1

AsEnumerable是一個擴展方法。您不需要編寫「DataTableExtensions.AsEnumerable(table)」 - 只需編寫「table.AsEnumerable()」。 – 2010-05-19 04:21:50