使用linq将逗号分隔的字符串与整数列表匹配,并返回新对象

本文关键字:返回 新对象 对象 列表 linq 分隔 整数 字符串 使用 | 更新日期: 2023-09-27 17:50:14

编辑:我改变了我的输入

List<string>

到a List<int>。它们现在应该总是有效的整数,而不是empty/null等。

我现在有一个6项列表,这些项都是一致的整数。

我还有一个对象,它包含一个逗号分隔的整数字符串。我正在尝试将输入与此列表相匹配。


例如

输入可以是,1000,2000,3000对象包含1000、2000、3000、4000我希望这个匹配。

如果我的输入是1000,2000,3000,4000,而我的对象只包含1000,2000,3000 ->它应该不匹配。

下面是我当前使用linq to xml创建对象的代码。"TaxUnitIdList"是逗号分隔的字符串。(这是当我的输入是字符串时)
var   obj = (from tug in tugElem.Descendants("CodeData")
select new TaxUnitGroups
{
    Code = (string)tug.Attribute("code"),
    CodeID = (string)tug.Attribute("codeid"),
    Desc = (string)tug.Attribute("desc"),
    TaxUnitIdList = (string)tug.Attribute("taxunits")
});

我在想下面的东西或一个连接(我无法工作),这是失败的,因为我想要一个布尔值(这是有意义的)

var matchedTugs = (from tug in tugElem.Descendants("CodeData")
    let TaxUnitIdList = (string)tug.Attribute("taxunits")
    let taxArr = TaxUnitIdList.Split(',').Select(int.Parse)
    where taxArr.Contains(inputTaxUnits.All()) //This is where I screw up
    select new TaxUnitGroups
    {
        Code = (string)tug.Attribute("code"),
        CodeID = (string)tug.Attribute("codeid"),
        Desc = (string)tug.Attribute("desc"),
        TaxUnitIdList = (string)tug.Attribute("taxunits")
    }).ToList();  

使用linq将逗号分隔的字符串与整数列表匹配,并返回新对象

在Where子句中试试:

TaxUnitIdList.Split(',')
    .Select(s => int.Parse(s))
    .Except(inputTaxUnits.Where(s=>int.TryParse(s, out tempInteger))
        .Select(s=>int.Parse(s)))
    .Any();

基本上,我们要将TaxUnitId列表转换为整数数组,将输入列表转换为良好的 (tryparse)输入数组,查找差异并验证结果为0。