Преобразовать код в лямбда / LINQ (C # 3.0) - PullRequest
0 голосов
/ 19 мая 2010

Как преобразовать приведенный ниже код в лямбду

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

В коде нет ничего плохого, но ради обучения я хочу это сделать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 мая 2010

Вот одно предложение:

Вместо использования .ForEach используйте from, а затем select элемент, создаваемый внутри цикла.

0 голосов
/ 19 мая 2010

Я так и сделал ..

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>();
                    }
                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...