【发布时间】:2020-12-08 11:21:19
【问题描述】:
我有一个DataTable,其中一些属性数据来自数据库,DataTable 中的每个数据都属于一个产品,每个产品可以有多个属性。
所以我有另一个DataTable,它在foreach 中包含所有产品,通过循环遍历每一行,我将每个产品添加到List<Plu>,如下所示:
var productAttr = new List<Plu.Attributi>();
foreach (DataRow rowPlu in dt.Rows)
{
try
{
int id = (int)rowPlu["ID_PLUREP"];
plu.Add(new Plu(
id,
(string)rowPlu["CODICE_PRP"],
(string)rowPlu[ESTESA],
(string)rowPlu[DESCR], (float)rowPlu["PRE_PRP"],
rowPlu.IsNull("IMG_IMG") ? null : (string)rowPlu["IMG_IMG"],
productAttr,
null,
(int)rowPlu["ID_MENU_PRP"]
));
}
catch
{
return plu;
}
}
现在productAttr 是空的,但现在我需要将它的属性添加到每个产品中,所以通过以下函数我得到一个DataTable,其中填充了数据库中包含所有产品属性的数据:
var attributi = Attributi(connection, idNegozio);
然后我试图在foreach 中做这样的事情
foreach (DataRow rowPlu in dt.Rows)
{
try
{
int id = (int)rowPlu["ID_PLUREP"];
plu.Add(new Plu(
id,
(string)rowPlu["CODICE_PRP"],
(string)rowPlu[ESTESA],
(string)rowPlu[DESCR], (float)rowPlu["PRE_PRP"],
rowPlu.IsNull("IMG_IMG") ? null : (string)rowPlu["IMG_IMG"],
from row in attributi.AsEnumerable() where row.Field<int>("ID_PLUREP_VAT") == id select row,
null,
(int)rowPlu["ID_MENU_PRP"]
));
}
catch
{
return plu;
}
}
但是 LINQ 返回一个EnumerableRowCollection 而我需要一个IEnumerable<Plu.Attribute>,所以我想知道是否有一种懒惰的方式将.AsEnumerable 转换为IEnumerable<Plu.Attrbute>...
【问题讨论】:
-
.Cast<Plu.Attrbute>()?