即时通讯产品列表中的ExpandoObject列表有一个可怕的问题,我无法使用产品列表中的普通类别原因,有些产品使用尺寸作为数字(20,21 ,22 ...),其他作为字母(S,M,L,XL ....)我把这个在网格上,在每个尺寸列中,我把每个商店从供应商处收到的数量ExpandoObject性能不佳
这是我的名单:
listaGrade = new List<dynamic>();
foreach(product p in BD.Proc)
{
foreach(store s in BD.Stores)
{
dynamic itemGradeDinamic = new ExpandoObject();
itemGradeDinamic.MODELDES = p.MODELDES;
itemGradeDinamic.TIPO = p.TIPO;
itemGradeDinamic.DESCRIPTION = p.DESCRIPTION;
itemGradeDinamic.STORE = s.CODE;
itemGradeDinamic.STOREDES = s.NAME;
itemGradeDinamic.SUBTOTAL = 0;
foreach (string size in p.sizes)
{
((IDictionary<String, Object>)itemGradeDinamic).Add(size, 0);
}
listaGrade.add(itemGradeDinamic);
}
}
获取数据:
object description, modelDes = "";
object qtde, store = 0;
foreach (ExpandoObject obj in listaGrade)
{
foreach (string size in "products".sizes)
{
if (((IDictionary<string, object>)obj).TryGetValue(size, out qtde))
{
if (Convert.ToDecimal(qtde) > 0)
{
((IDictionary<string, object>)obj).TryGetValue("DESCRIPTION", out description);
((IDictionary<string, object>)obj).TryGetValue("MODELDES", out modelDes);
((IDictionary<string, object>)obj).TryGetValue("TIPO", out tipo);
((IDictionary<string, object>)obj).TryGetValue("SHOP", out store);
}
}
}
}
这里的技巧是不使用ExpandoObject。它并不意味着你可以用于一切的通用类型。这是针对动态对象是唯一选项的代码部分。为什么你不能简单地将大小存储为一个字符串?这将很容易处理大小20,21等。 –
“我不能使用正常的类别原因即时通讯使用产品清单,有些产品使用大小作为数字(20,21,22 ...),其他作为字母(S ,M,L,XL ....)“ - 为什么不使用'object'或'string'来处理这两种情况?在性能方面,使用'ExpandoObject'会让你付出代价。 –
糟糕的选择导致糟糕的表现。正如其他人之前所写,清理对象层次结构。 –