在我的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是否相同。
感谢您的帮助!