我一直在尝试以基于表达式的方式编写以下代码,但不确定如何在比较后对对象进行赋值。任何帮助将不胜感激。
var pcs = from a in collection
group a by a.TotType
into g
select new
{
TType = g.Key,
SColl = g.Select(r => r)
};
for (int i = 0; i < processResult.PAndLReport.BreakdownTotTypeCollection.Count; i++)
{
foreach (var ttypes in pcs)
{
if (processResult.PAndLReport.BreakdownTotTypeCollection[i].TotType == ttypes.TType)
{
BreakdownCollection coll = new BreakdownCollection();
foreach (var item1 in ttypes.SColl)
{
coll.Add(item1);
}
processResult.PAndLReport.BreakdownTotTypeCollection[i].BreakdownCollection = coll;
}
}
}
所以 - 代码可以工作,但是非常冗长。
这是减少代码的尝试。我做了一些假设(此代码与其他代码的分配不完全相同),但它可能接近您想要的。
var pcs = collection.ToLookup(a => a.TotType);
foreach(var bttcoll in processResult
.PAndLReport
.BreakdownTotTypeCollection)
{
var items = pcs[bttcoll.ToTType];
//do you have a constructor that takes an IEnumerable<Item> ?
bttcoll.BreakdownCollection = new BreakdownCollection(items)
}
通常,您应该避免在 linq 查询中更改对象状态。 Linq 来自函数式编程的思维模式,其中状态永远不会改变(相反,新对象是用所需的状态创建的)。
我是一名优秀的程序员,十分优秀!