如何通过 LINQ 语句获取 Int 列表
本文关键字:Int 列表 获取 语句 何通过 LINQ | 更新日期: 2023-09-27 18:34:52
我有以下类
public class PaymentItemViewModel
{
public List<int> Placements { get; set; }
public int StandardPayment { get; set; }
}
然后一个函数返回以下内容
IEnumerable<PaymentItemViewModel> paymentItems
如何使用 LINQ 获取所有展示位置 ID 的列表?
我可以执行以下操作吗?
List<int> placementIds = paymentItems.Any(x=>x.Placements) ??
可能您正在寻找Enumerable.SelectMany
方法
List<int> placementIds = paymentItems.SelectMany(vm => vm.Placements).ToList()
你可以这样做:
var placementIds = new List<int>();
foreach(var item in paymentItems)
{
foreach(var placementId in item.Placements)
{
placementIds.Add(placementId);
}
}
如果您确实想在 LINQ 中执行此操作,则可以执行以下操作:
var placementIds = paymentItems.SelectMany(item => item.Placements).ToList();
这应该有效。 Any(( 只是查看是否存在,并取一个布尔值。 SelectMany
抓取所有属性或对象,"并将生成的序列展平为一个序列"。
List<int> placementIds = paymentItems.SelectMany(x=>x.Placements).ToList();
from aPaymentModelView in PaymentItems
from aPlacements in aPaymentmodelView
select aPlacements
这应该根据这个工作
在 LINQ 中平展列表
编辑
由哈兹克提供
var ids1 = (from model in models
from placement in model.Placements
select placement).ToList();
我想我不明白它怎么知道连接List<int>
如果我选择放置,然后选择 ToList,我应该得到一个List<List<int>>
编辑 2好的,所以实际上交叉连接
from aModel in Models
from aPlacement in aModel.Placements
生成 { 模型、展示位置 } 的元组但是这些元组是相互隐式连接的,您所要做的就是排除外部标签,即模型
编辑 3 我想它不能被视为交叉连接,虽然感觉像一个,但由于放置已经隔离到单独的列表中,它实际上只是一个完整的广度和深度树遍历,
这只能用M软主义来准确描述,SelectMany
我从 ToString 为 var 报告的类型中得到了这个想法。 它具有SelectMany迭代器的类型。