如何通过 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) ??

如何通过 LINQ 语句获取 Int 列表

可能您正在寻找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迭代器的类型。