【问题标题】:C# Linq combine multiple values into data rowC# Linq 将多个值组合成数据行
【发布时间】:2018-10-02 18:25:55
【问题描述】:

所以我拉下一个 xml 记录字符串。这一个字段具有 1:M 的关系。通常我会像这样加载它们:

var entries = from x in xml.Descendants(Reporting) select new { additionalReportingValue = (string)x.Descendants("additionalReporting").FirstOrDefault()};

但由于 additionalReportingValue 可以为一条记录有多个值,因此它失败了。我不确定如何遍历所有值并将多个值转换为 1。

这里是提要的示例以及它如何显示它们,该记录有 2 个值(E,S):

<ns1:listOfAdditionalReportingValues>
<ns1:additionalReportingValue>E</ns1:additionalReportingValue> 
<ns1:additionalReportingValue>S</ns1:additionalReportingValue> 
</ns1:listOfAdditionalReportingValues>

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    如果你想将它们组合成一个字符串,例如逗号分隔,你可以像这样使用Join inline:

    var entries = from x in xml.Descendants(Reporting)
        select new 
        {
            additionalReportingValue = string.Join
            (
                ",",
                x.Descendants("additionalReporting")
            )
        };
    

    【讨论】:

    • 这是完美的。运行我的 exe 时,我现在没有收到任何错误。但是这些值是空白的。很好奇为什么会这样......似乎你发布的内容可以解决问题
    • 您的意思是需要添加 Select,例如如果你想得到每个节点的Value 然后使用x.Descendants("additionalReporting").Select( node =&gt; node.Value)
    • 将其添加到该行,结果保持不变。用我知道的 100 条记录进行测试是有价值的。单个或多个有价值的都没有通过。
    • 从我上次说的开始。您的解决方案完美运行。我将列表值与单独的行分开,这就是诀窍。谢谢你是最棒的!
    【解决方案2】:

    取决于你想要什么。我通常使用'XDocument',然后继续你的'后代'方法,你有一个要迭代的集合。您的数据示例(不包括命名空间以方便使用)类似于:

    static void Main(String[] args)
        {
            var data = "<listOfAdditionalReportingValues><additionalReportingValue>E</additionalReportingValue><additionalReportingValue>S</additionalReportingValue></listOfAdditionalReportingValues>";
            var xdoc = XDocument.Parse(data);
            var rootDescendents = xdoc.Root.Descendants();
            var elementDescendents = xdoc.Element("listOfAdditionalReportingValues").Descendants();
            rootDescendents.ToList().ForEach(x => Console.WriteLine(x));
            rootDescendents.ToList().ForEach(x => Console.WriteLine(x.Value));
            elementDescendents.ToList().ForEach(x => Console.WriteLine(x));
            elementDescendents.ToList().ForEach(x => Console.WriteLine(x.Value));
    
            Console.ReadLine();
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多