gpt4 book ai didi

c# - 需要使用 Linq 将列表转换为不同列表的帮助

转载 作者:行者123 更新时间:2023-12-02 02:52:45 25 4
gpt4 key购买 nike

假设我有一个包含 1 条记录的列表:

[
{
"AccountNumber": 1234,
"eDocConfirms": true,
"eDocStatements": true,
"eDocTaxforms": false
}
]

此列表是一个强类型对象,具有以下属性:

        public int AccountNumber { get; set; }
public bool? eDocConfirms { get; set; }
public bool? eDocStatements { get; set; }
public bool? eDocTaxforms { get; set; }

使用 LINQ,我想将其转换为如下所示的列表:

[
{
"AccountNumber": 1234,
"EDocumentTypeName ": "Confirms"
},
{
"AccountNumber": 1234,
"EDocumentTypeName": "Statements"
}
]

这个新列表将是一个不同类型的列表:

public class DeliveryPreference
{
public int AccountNumber { get; set; }
public string EDocumentTypeName { get; set; }
}

请注意,Taxforms 未包含在新列表中,因为它在第一个列表中设置为 false。

我知道我可以通过一些循环轻松地做到这一点,但我更喜欢使用 LINQ。

我知道 Stack Overflow 更喜欢我展示我已经尝试过的内容,但我很难理解这一点。

最佳答案

对于这种情况,我将使用附加功能

public static IEnumerable<string> GetTrueProperties(Data t)
{
if (t.eDocConfirms == true) yield return "Confirms";
if (t.eDocStatements == true) yield return "Statements";
if (t.eDocTaxForms == true) yield return "Tax";
}

仅仅因为它是一个对象而不是字典;否则,您可以动态选择正确的属性(或者您可以使用反射,但我认为这里太多了,因为您有强类型对象)。

然后它看起来像

var list = new List<Data> {
new Data
{
AccountNumber = 1,
eDocConfirms = true,
eDocStatements = true,
eDocTaxForms = false
}
};
list.SelectMany(item => GetTrueProperties(item).Select(p => new DeliveryPreference
{
AccountNumber = item.AccountNumber,
EDocumentTypeName = p
}));

关于c# - 需要使用 Linq 将列表转换为不同列表的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61688923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com