Convert the code into lambda/LINQ(C#3.0)
How to convert the below code into lambda
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(dtCharecteristic开发者_如何学Gos.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>();
}
}
I am using C#3.0
There is nothing wrong in the code but for the sake of learning I want to do this.
Thanks
Here's one suggestion:
Instead of using .ForEach
, use a from
, then select
the item being created inside your loop.
I did that..
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>();
}
);
精彩评论