c# - C# Linq 选择/加入自定义返回类型
问题描述
我有以下 linq 示例:
List<FoodOrderItem> foodOrderItems = foodItemsWithPricesDbResult.ResultValue;
List<FoodOrderItem> orderItemsWithDiscounts= (from orderItem in order.Items
join foodOrderItem in foodOrderItems
on orderItem.FoodId equals foodOrderItem.Id
select mergeOrderAndFoodInformation(foodOrderItem,orderItem)).ToList();
.
.
.
private static FoodOrderItem mergeOrderAndFoodInformation(FoodOrderItem foodOrderItem, OrderItem orderItem)
{
foodOrderItem.DiscountValue = orderItem.DiscountValue;
foodOrderItem.DiscountKind = orderItem.DiscountKind;
foodOrderItem.CurrentOrderedCount = orderItem.Count;
return foodOrderItem;
}
此mergeOrderAndFoodInformation
函数更新输入foodOrderItem
对象的某些字段并返回更新后的 foodOrderItem。
1-如果我不想使用诸如更新和返回结果之类的函数,如何以内联样式编写该select mergeOrderAndFoodInformation(foodOrderItem,orderItem)
部分?我的意思是如果我想在不使用外部函数的情况下编写代码,我该如何更改段?mergeOrderAndFoodInformation
select mergeOrderAndFoodInformation(foodOrderItem,orderItem)
2-如何使用 Lambda 表示法编写此 linq 查询?
PS如果没有正确使用诸如inline
和之类的关键字,请接受我的道歉。external
如果您纠正我,以防有一些错误,我将不胜感激。
解决方案
您正在修改源集合中的对象,这在使用 Linq 时通常不是最佳实践。它将要求您使用 lambda 语法来内联函数,如下所示:
order.Items.Join(foodOrderItems, oi=>oi.FoodId, foi=>foi.Id, (oi, foi) => new {oi, foi})
.Select(j => {
j.foi.DiscountValue = j.oi.DiscountValue;
j.foi.DiscountKind = j.oi.DiscountKind;
j.foi.CurrentOrderedCount = j.oi.Count;
return j.foi;
})
.ToList()
请注意,Join
在 lambda 语法中更丑(恕我直言),并且内联函数不会给您带来很多好处。
推荐阅读
- java - JavaFX:基于 2 次鼠标点击在画布上绘制一个矩形
- excel - 如何在excel中列出六列中值的所有可能组合?
- javascript - 如何从数组中的多个对象中准确提取 2 个键和值
- arrays - SPARK - 在数组中的值上连接 2 个数据帧
- python - 如何将 Pandas Group By 语句作为 Pandas 数据框返回
- html - 具有行跨度的行具有更大的高度
- apache-kafka - Confluent KSQL“为此主题注册流或表”不填充主题字段
- python - 如何在python中产生频率扫描声音
- go - 如何仅使用 Delve Go Debugger 调试我的代码?
- javascript - 从 api 获取数据后在 React 中显示嵌套对象?