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

时间:2014-03-13 20:53:08

标签: c# linq

编辑:我从

更改了输入
List<string>

List<int>。它们现在应该总是有效的整数,没有空/ null等。

我目前有一个6项目列表,这些项目是整数。

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


例如

输入可以是1000,2000,3000 该对象包含1000,2000,3000,4000 我想要这个匹配。

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

这是我使用linq到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();  

1 个答案:

答案 0 :(得分:0)

在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。