我一直试图以基于表达式的方式编写以下代码,但不确定如何在比较后对该对象进行分配。任何帮助都将受到高度赞赏。
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;
}
}
}
答案 0 :(得分:1)
所以 - 代码有效,但它非常详细。
这是减少代码的一个方面。我做了一些假设(这段代码与其他代码没有完全相同的分配),但它可能接近你想要的。
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来自函数式编程思维模式,其中状态永远不会改变(相反,新对象是使用所需状态创建的)。
答案 1 :(得分:0)
如果答案大卫B给出了作品,那很好,但不要在你的代码中使用它。第一个(大概)可以工作,下一个人更容易理解。
要考虑的一些事情: