【发布时间】:2015-05-03 14:10:04
【问题描述】:
在我的 C# .NET 应用程序中,我有两个对象:Article,它是一些已定义的文章及其总价格(意思是应该通过将文章的价格乘以文章的数量来计算价格已订购)和 ArticleOrdered,其中包含订购的文章数量和该文章的价格。 我有两者的集合:文章集合,即数据库中所有文章的集合和仅订购文章的集合。 我现在要做的是为订购的每篇文章计算它的总价格,方法是将单篇文章的价格乘以订购的数量。 为此,我决定使用 linq 语句,它选择两个列表(所有文章列表和有序文章列表)的公共部分(当然使用 join)。现在的问题是我必须使用orderedArticles 中的字段对Article 类型的原始对象执行一些操作(计算最终价格)。现在我做所有事情(非常糟糕;))方式:
var commonArticles = from art in articlesList
join orderedArt in orderedArticlesList on art.Id equals orderedArt.Id
select art;
var commonOrderedArticles = from art in articlesList
join orderedArt in orderedArticlesList on art.Id equals orderedArt.Id
select orderedArt;
foreach (var art in commonArticles)
{
foreach (var orderedArt in commonOrderedArticles)
{
if (art.Id == orderedArt.Id)
{
art.Price += orderedArt.QuantityOrdered*orderedArt.Price;
}
}
}
...因为它使我能够处理文章的引用。 两个 linq 语句之间的唯一区别是,在第一个语句中我选择 art,而在第二个语句中选择 orderedArt。 如何使这两个 linq 语句合二为一并对原始文章的对象进行正确的计算?我曾考虑在那里使用 new 关键字选择一些匿名类型,但据我所知,这将返回全新的类型,所以在 art.Price 上工作我不会工作在参考(原始)对象上,但在副本上。 这也是为什么我现在必须执行这些奇怪的 foreach 循环并检查对应的 Id 是否相同。
感谢您的帮助!
【问题讨论】: